2012-01-06 74 views
1

我有一张桌子,日期不同,其中一个分为3个栏位: PassDay,PassMonth,PassYear。Mysql日期操作

我想这些日期与其他日期时间orig_date比较所以我做了什么是

select `orig_date`, CONCAT_WS('-',`PassYear`,`PassMonth`,`PassDay`) as `pass_expiration` where `pass_expiration` < `orig_date`; 

的问题是,这个月被存储为一个月份名称(1月),而不是一个数(01)所以我的结果为pass_expiration为例如2013年4月15日。

有没有办法将这个(2013年4月-15日)直接从查询转换为正常的日期时间?

回答

0

你想str_to_date

where STR_TO_DATE(CONCAT_WS('-',PassYear,PassMonth,PassDay),'%Y-%M-%d') < orig_date 

此外,作为一个音符,你不能在where子句中引用计算列。只有order by子句(where是用于过滤来自表的结果的谓词; order by在列集计算完成后运行)。

+0

可能在'PassMonth'和'PassDay'之间插入一个空格。另外,从我听到的内容来看,'+'不支持作为MySQL中的连接运算符。 (我不是普通的MySQL用户,所以我不确定。) – 2012-01-06 22:53:58

+0

我得到空的结果,当我尝试'SELECT STR_TO_DATE(PassMonth +''+ PassDay +','+ PassYear,'%M%d, %Y')from data where 1 limit 5' to check,each result is set to'NULL' – Loris 2012-01-06 22:56:12

+0

它与'where STR_TO_DATE(CONCAT_WS(' - ',PassYear,PassMonth,PassDay),'%Y-%M- %d') Loris 2012-01-06 23:05:57