我有一些数据库,以前的 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()
我有一些数据库,以前的 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()
如日期和时间文字中所述:
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
的数字,前提是该数字作为日期有意义。例如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上查看。
你可以试试这个——
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()
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() ;
试试这个希望这能解决你的问题