MySQL/MariaDB临时转换列数据类型运行查询报1064语法错误咨询
错误原因
- 语法不兼容:你使用的是SQL Server风格的
CONVERT(DATETIME, 字段, 样式码)写法,MariaDB/MySQL不支持该语法,这是触发1064语法报错的直接原因。MySQL/MariaDB做日期格式转换应使用STR_TO_DATE(字符串, 格式模板)函数,你在ORDER BY子句中使用的写法是符合要求的。 - WHERE子句逻辑不合法:WHERE后需要跟随返回布尔值的判断条件,你直接在WHERE中写
CONVERT(...) AND CONVERT(...)没有对应判断规则,本身就不符合SQL语法要求。 - 日期比较逻辑错误:直接用VARCHAR类型的日期字符串做大小比较,会按字符顺序逐位比对,出现
'01/01/2022' < '12/31/2021'这类不符合日期逻辑的错误结果。
修正后的查询语句
SELECT DISTINCT Booked_From, Booked_To FROM bookings WHERE Hallname ='Executive Hall' AND STR_TO_DATE(Booked_From, '%m/%d/%Y') >= '2021-11-26' AND STR_TO_DATE(Booked_To, '%m/%d/%Y') <= '2021-12-16' AND Bin='false' ORDER BY STR_TO_DATE(Booked_From, '%m/%d/%Y') ASC
补充说明
如果需要过滤字段中无法转换为合法日期的脏数据,可以在WHERE条件中追加如下判断:
AND STR_TO_DATE(Booked_From, '%m/%d/%Y') IS NOT NULL AND STR_TO_DATE(Booked_To, '%m/%d/%Y') IS NOT NULL
内容的提问来源于stack exchange,提问作者Jedio
相关产品推荐
相关产品推荐

