我正在使用一种以人类可读格式存储日期列的数据库。似乎很难计算出给定日期晚于的行。
该格式的存储方式为 2018年11月20日
我正在尝试返回collection_date晚于 2018年11月5日
的所有行我尝试了以下查询,该查询引发错误。
SELECT *
FROM `orders`
WHERE collection_date >= CONVERT(datetime, '20181105')
这将引发以下错误消息:
这是我的数据库信息:
更新1: 我正在尝试以下查询。到目前为止,没有一个查询有效,所有查询都产生0行:
SELECT *
FROM `orders`
WHERE STR_TO_DATE('collection_date', '%d %M, %Y') >= 2018-11-05
这也不起作用
答案 0 :(得分:1)
在MySQL中,您需要STR_TO_DATE()
:
SELECT o.*
FROM `orders` o
WHERE collection_date >= Str_To_Date(datetime, '%e %M, %Y');
CONVERT()
使用此语法是SQL Server函数。
答案 1 :(得分:1)
实际上...您必须在STR_TO_DATE
列上应用collection_date
,因为那是人类可读的日期。至于 input 日期,只需以yyyy-mm-dd
格式指定即可:
SELECT *
FROM `orders`
WHERE STR_TO_DATE(collection_date, '%e %M, %Y') >= '2018-11-05'
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用STR_TO_DATE()
函数
SELECT *
FROM `orders`
WHERE collection_date >= STR_TO_DATE('20181105', '%Y%m%d')
答案 4 :(得分:0)
此查询对我有用:
SELECT *
FROM orders
WHERE STR_TO_DATE(collection_date, '%d %M, %Y') >= '2018-11-05'
AND collection_time = '4:00 PM'
ORDER BY `orders`.`collection_date` DESC