我有一张表,里面有一些贸易商品和物流方面的信息。它有一个名为‘到货日期’的列,其中包含类似于"30.06.2019“格式的到达日期。
现在我需要输入一个请求,它只显示尚未到达的商品,换句话说,到达日期> 30.06.2019。所以我输入了我的请求
SELECT *
FROM traffic
WHERE arriving_date > '30.06.2019'
但是这个请求只显示了空白字段。我想我已经猜到原因了。显然,它不能以这样的格式比较数字。但我不确定我应该如何让它比较日期。感谢您的帮助。
发布于 2019-06-30 19:23:08
假设arriving_date只是一个字符串(而不是实际的日期)
SELECT *
FROM traffic
WHERE str_to_date(arriving_date, '%d.%m.%Y') > now()
OR arriving_date is null;
这会将arriving_date字符串转换为日期,并将其与当前日期和时间进行比较。
我还添加了arriving_date为空(即未设置)的检查,以防它是在到达时设置的。
请注意,对列中的值使用函数会使所有查询运行全表扫描。这是没有办法的,因为你的日期格式是这样的。
发布于 2019-06-30 21:00:33
感谢大家的帮助!
我设法这样解决我的问题: 1.我将日期数据类型更改为‘arriving_date’(它是整数) 2.我将日期从格式'dd.mm.yyyy‘重写为'yyyy-mm-dd',不确定这是否重要。3.最终请求如下所示:
SELECT *
FROM traffic
WHERE arriving_date > NOW()
它现在可以完美地工作了。
发布于 2019-06-30 19:09:19
假设arriving_date列是porper数据类型,请尝试将日期字符串转换为适当的日期
SELECT *
FROM traffic
WHERE arriving_date > str_to_date('30.06.2019', '%d.%m.%Y')
或者如果两个日期都是
https://stackoverflow.com/questions/56824319
复制相似问题