使用mysql php将非日期格式转换为日期

时间:2012-12-18 10:13:23

标签: mysql

我有一些数据库,其中前一个错误的人已将日期格式设置为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() 

3 个答案:

答案 0 :(得分:2)

Date and Time Literals中所述:

  

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'

  •   
  • 作为YYYYMMDDYYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905830905被解释为'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() ;

尝试这个希望这将解决你的问题