MySQL/MariaDB日期列过滤SQL语法错误如何修复?
问题报错说明
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where paid_date between" January1,2021" and "Getdate()"' at line 5
错误原因排查
- 重复定义
WHERE子句:单表查询的多个过滤条件只能写1个WHERE,多个条件之间用AND拼接即可,重复写WHERE会直接触发语法错误 - 日期函数使用错误:
Getdate()是SQL Server的原生函数,MySQL/MariaDB中获取当前系统日期应该使用CURDATE(),且函数不能被引号包裹,否则会被识别为普通字符串无法正常执行 - 日期格式不符合规范:MySQL/MariaDB默认不支持
January1,2021这类自然语言格式的日期,需要使用YYYY-MM-DD的标准日期格式编写常量 - 语法细节缺失:
between关键字和后续的日期值之间缺少空格,日期/字符串常量推荐使用单引号包裹,避免因数据库sql_mode配置差异触发额外报错
修正后的SQL代码
SELECT DATEDIFF(paid_date, cart_shipped_date) AS Days_till_paid, stat_completed_carts.* FROM stat_completed_carts WHERE billing_method_id = '30' AND paid_date BETWEEN '2021-01-01' AND CURDATE();
内容的提问来源于stack exchange,提问作者ehs
相关产品推荐
相关产品推荐

