选择后无法获取行数据

ygya80vv  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(311)

我对php和mysql都有点陌生,我遇到了一个问题(我甚至不确定这是否可行),我的问题是:
我这里有张table:

我用这句话:

SELECT *
FROM (SELECT DATE_FORMAT(STR_TO_DATE(SPLIT_STRING(`date`,' ',1), '%m/%d/%Y'), '%Y-%m-%d') as month
      FROM `automation-reports`
     ) as innerTable
WHERE MONTH(month) = 5

这给了我:

我希望能够 success 从包含它的行开始:

我甚至不确定这是否可行,因为现在该行返回了数据,但正如我所说,我是mysql的新手,所以我不确定其局限性。

9rnv2umw

9rnv2umw1#

考虑到你的 date 列不是一个真正的 DATETIME 类型,则需要使用 STR_TO_DATE() 但是您可以使用更完整的日期字符串格式来返回完整的 DATETIME 一下子就把所有的东西都抛在脑后。正确的格式字符串是 '%m/%d/%Y %r' ,在哪里 %r 是12小时的时间吗 hh:mm:ss 然后 AM/PM . 使用这种格式,您可以将整个输出 Package 成 MONTH() 要么在 SELECT 或在 WHERE .

SELECT
  ID,
  reportid,
  report,
  success,
  STR_TO_DATE(date, '%m/%d/%Y %r') AS realdate
FROM
  `automation-reports`
-- Apply MONTH() in the HAVING
HAVING MONTH(realdate) = 5

或者代替 HAVING 你可以把整个表达式放进去 WHERE ```
...
WHERE MONTH(STR_TO_DATE(date, '%m/%d/%Y %r') = 5)

但真的,我建议把这个专栏改成一个适当的 `DATETIME` ,因为这样做将为您打开mysql的所有数据处理函数,并允许rdbms索引和优化列。您不能真正地就地更改列并让mysql正确地解析日期。相反,您需要添加一个新列,填充它,然后删除旧列并重命名新列(除非您想同时保留这两个列)。

-- Add a DATETIME
ALTER TABLE automation-reports ADD realdate DATETIME;

-- And fill it with dates parsed from your string column
UPDATE automation-reports SET realdate = STR_TO_DATE(date, '%m/%d/%Y %r');

-- Drop the old column if you do not need both
ALTER TABLE automation-reports DROP date;

-- And rename the new one to the old name
ALTER TABLE automation-reports CHANGE realdate date DATETIME;

在这种情况下,可以在查询日期后设置日期的显示格式,这比将日期存储为要查询的格式的字符串更好。
如果您现在可以重命名这个表,我还建议您将表名从 `automation-reports` 至 `automation_reports` 因为mysql不需要下划线名称的倒勾引号,而您总是需要带有连字符的名称的倒勾引号。

相关问题