搜索数据表中不合法日期


  工作中,有时会遇到把大量excel中的数据导入数据库中,为了把数据全部导入到数据库中然后再检查合法性,一般就把日期的数据设成varchar,然后再在数据库中搜索,下面两条sql可以查到,前提是时间格式必须是以"-"分割的
这是检查日期格式的:
select a.* from  yhgy  a
where  (a.enddate is null or a.enddate not like '____-__-__'
or locate('0',
char(LOCATE(substr(a.enddate,1,1),'012345678 9'))|| char(LOCATE(substr(a.enddate,2,1),'012345678 9'))||
char(LOCATE(substr(a.enddate,3,1),'012345678 9'))|| char(LOCATE(substr(a.enddate,4,1),'012345678 9'))||
char(LOCATE(substr(a.enddate,6,1),'012345678 9'))|| char(LOCATE(substr(a.enddate,7,1),'012345678 9'))||
char(LOCATE(substr(a.enddate,9,1),'012345678 9'))|| char(LOCATE(substr(a.enddate,10,1),'012345678 9'))
) <> 0 )  with ur

这是检查日期合法性的:
select a.* from yhgy a where int(substr(a.enddate,6,2)) > 12 or (substr(a.enddate,9,2)>='31'
and int(substr(a.enddate,6,2)) not in (1,3,5 ,7,8,10, 12))

然后就可以使用date()方法,把字符串转化成日期格式

猜你喜欢

转载自yuzihan607.iteye.com/blog/1608625