MySQL中查询varchar类型MM-DD-YYYY格式日期大于2023-01-01的SQL问题
解决MySQL中varchar类型日期字段的查询语法错误问题
你的问题出在误用了SQL Server的CONVERT语法,MySQL的CONVERT函数不支持第三个格式参数,所以触发了1064语法错误。另外直接比较不同格式的日期字符串也会导致逻辑错误,下面给出两种正确的解决方法:
方法一:用STR_TO_DATE转换字段为日期类型(推荐)
MySQL提供STR_TO_DATE函数,可以按照指定格式将字符串转换为日期类型,完美适配你存储的MM-DD-YYYY格式:
SELECT * FROM sobacklog_all WHERE STR_TO_DATE(Schedule_Date, '%m-%d-%Y') > '2023-01-01';
%m匹配两位数字的月份(01-12)%d匹配两位数字的日期(01-31)%Y匹配四位数字的年份
转换后得到标准日期类型,和'2023-01-01'的比较逻辑完全正确,还能避免字段中格式不规范数据导致的错误。
方法二:将目标日期转为对应字符串格式比较(仅当字段格式绝对规范时使用)
如果能保证Schedule_Date字段的所有值都是严格的MM-DD-YYYY格式,也可以把查询条件的日期转成相同格式的字符串来比较:
SELECT * FROM sobacklog_all WHERE Schedule_Date > '01-01-2023';
⚠️ 注意:这种方式是字符串字典序比较,若字段存在格式错误(比如13-01-2023、01-32-2023),会得到错误的查询结果,所以优先推荐方法一。
为什么之前的语句报错?
MySQL的CONVERT函数语法为 CONVERT(表达式, 目标类型),没有第三个格式参数,你使用的CONVERT(DATE, Schedule_Date, 110)是SQL Server的语法,MySQL无法识别,因此触发1064语法错误。
内容的提问来源于stack exchange,提问作者Knockoutpie
相关产品推荐
相关产品推荐

