首页 > 解决方案 > Mysql:STR_TO_DATE 转换后查询没有结果

问题描述

我有一个表,其中一列上有字符串,字符串的格式是 ISO 8601(带 TZ)。

当我尝试运行以下查询时:

select * from `orders` where STR_TO_DATE('last_ship_date', '%Y-%m-%dT%TZ') >= STR_TO_DATE('2020-06-27 21:13:14', '%Y-%m-%d %h:%i:%s')

我没有结果,即使我在:“last_ship_date”列中具有相同格式和范围的日期(6 月 27 日之后),例如:2020-08-09T06:59:59Z

我在这里想念什么?为什么我无法选择 STR_TO_DATE 转换后的行?

谢谢你。

标签: mysqlsqlphpmyadminquery-optimizationwhere-clause

解决方案


您的代码有两个问题:

(1) 列last_ship_date用单引号括起来,因此它被视为字符串文字而不是列名

(2) 必须使用第二个日期的格式,%H而不是%h因为列中的小时是 24 小时格式。

所以改成这样:

select * from `orders` 
where STR_TO_DATE(last_ship_date, '%Y-%m-%dT%TZ') >= 
      STR_TO_DATE('2020-06-27 21:13:14', '%Y-%m-%d %H:%i:%s')

但您也可以简化为:

select * from `orders` 
where STR_TO_DATE(last_ship_date, '%Y-%m-%dT%TZ') >= '2020-06-27 21:13:14'

推荐阅读