我有一些数据库,其中前一个错误的人已将日期格式设置为20121218,是否可以将其用作mysql中的日期所以
SELECT substr(week_begin_date,0,4)+'-'+substr(week_begin_date,4,2)+'-'+substr(week_begin_date,6,8)
AS startdate
FROM table
WHERE startdate < now()
答案 0 :(得分:2)
MySQL以这些格式识别
DATE
值:
作为
'YYYY-MM-DD'
或'YY-MM-DD'
格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
和'2012@12@31'
是等效的。作为没有
'YYYYMMDD'
或'YYMMDD'
格式的分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523'
和'070523'
被解释为'2007-05-23'
,但'071332'
是非法的(它具有无意义的月和日部分)并变为'0000-00-00'
。作为
YYYYMMDD
或YYMMDD
格式的数字,前提是该数字作为日期有意义。例如,19830905
和830905
被解释为'1983-09-05'
。
因此20121218
实际上是有效的日期文字。因此:
SELECT DATE(`week_begin_date`) AS `startdate`
FROM `table`
WHERE DATE(`week_begin_date`) < NOW()
在sqlfiddle上查看。
但是,从长远来看,您最好修复您的架构(显然,任何希望以现有格式读取值的应用程序代码):
ALTER TABLE `table` MODIFY week_begin_date DATE
在sqlfiddle上查看。
答案 1 :(得分:1)
你可以试试这个 -
SELECT * from Table where STR_TO_DATE(substr(week_begin_date,0,4),substr(week_begin_date,4,2),substr(week_begin_date,6,8)','%d,%m,%Y') > now()
答案 2 :(得分:0)
select STR_TO_DATE(SUBSTR(week_begin_date,4,2)+"/"+SUBSTR(week_begin_date,6,8)+"/"+SUBSTR(week_begin_date,0,4),'%m/%d/%Y') AS startdate
FROM table where STR_TO_DATE(SUBSTR(week_begin_date,4,2)+"/"+SUBSTR(week_begin_date,6,8)+"/"+SUBSTR(week_begin_date,0,4),'%m/%d/%Y') < now() ;
尝试这个希望这将解决你的问题