我正在尝试根据日期搜索一些vchar值。
我必须使用的字符串如下所示:
1/7/2006 12:45:24 AM
1/7/2006 1:18:36 AM
1/7/2006 1:21:43 AM
1/7/2006 1:32:09 AM
3/30/2006 12:32:10 PM
3/30/2006 1:19:30 PM
3/30/2006 1:20:44 PM
所以首先让我们摆脱AM .. PHPMyAdmin sql查询是:
SELECT trim('AM' FROM `orderdate`) FROM tblorders
这样可以摆脱AM现在让我们将值设置为变量并尝试将字符串包装到结果周围的str_to_date():
SELECT trim('AM' FROM `orderdate`) AS `value`, STR_TO_DATE(`value`,'%d,%m,%Y') FROM tblorders
这会产生一个未知列的值。如何将两个函数值串在一起,然后使用它们进行过滤,例如WHERE值> 2006年2月1日?
答案 0 :(得分:1)
你可以编写这样的函数:
select str_to_date(trim('AM' from orderdate), '%m/%d/%Y')
请注意,我还更正了您的日期格式以匹配您的数据。您实际上不需要修剪这些值以对它们使用str_to_date
,这样可以正常工作:
select str_to_date(orderdate, '%m/%d/%Y')
如果要在WHERE子句中使用它,那么将函数调用放在那里:
select trim('AM' from orderdate), str_to_date(orderdate, '%m/%d/%Y')
from your_table
where str_to_date(orderdate, '%m/%d/%Y') > '2006-01-02'
让优化器识别重复或使用派生表:
select value, the_date
from (
select trim('AM' from orderdate) as value, str_to_date(orderdate, '%m/%d/%Y') as the_date
from your_table
) dt
where the_date > '2006-01-02'
请注意在查询中使用ISO 8601日期,该格式是明确的,任何值得使用的数据库都会理解它,无论您的语言环境设置如何。
我还建议您修复架构以使用实时时间戳而不是那些字符串。