0

我有一些数据库,以前的 err...person 已将日期格式设置为 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() 
4

3 回答 3

2

日期和时间文字中所述:

MySQL 可以识别DATE以下格式的值:

  • 作为一个'YYYY-MM-DD''YY-MM-DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31'是等价的。

  • 作为在任何一种格式中都没有分隔符的'YYYYMMDD'字符串'YYMMDD',前提是该字符串作为日期有意义。例如,'20070523'and'070523'被解释为'2007-05-23', 但是'071332'是非法的(它有无意义的月份和日期部分)并且变成'0000-00-00'.

  • 作为任一YYYYMMDD格式YYMMDD的数字,前提是该数字作为日期有意义。例如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上查看。

于 2012-12-18T10:31:00.213 回答
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()
于 2012-12-18T10:33:17.033 回答
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() ;

试试这个希望这能解决你的问题

于 2012-12-18T10:34:59.187 回答