2012-02-23 76 views
0

我试图使一些vchar值基于日期搜索。MySQL修剪和字符串在一个查询中的日期

我有这个样子的工作中的字符串:

2006年1月7日上午12时45分24秒

2006年1月7日上午01点18分36秒

1 /二千○六分之七上午01点21分43秒

2006年1月7日上午01时32分09秒

2006年3月30日下午12时32分10秒

2006年3月30日下午1时19分三十○秒

2006年3月30日下午1点二十〇分44秒

所以第一关,让我们摆脱了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 value> 2/1/2006?

回答

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日期,该格式是明确的d无论您的区域设置如何,任何值得使用的数据库都会理解它。

我还建议您修复您的架构以使用实时时间戳而不是这些字符串。

+0

优秀!谢谢! – Burndog 2012-02-23 20:44:35