MySQL中能否在DATE_FORMAT函数内嵌套CASE语句?语法报错求助
在MySQL的DATE_FORMAT中嵌套CASE语句完全可行!
当然可以在MySQL的DATE_FORMAT函数里嵌套CASE语句啦!你遇到的语法错误根本不是DATE_FORMAT和CASE的括号问题,咱们来揪出真正的问题所在。
你写的SQL语句里引用了dd_fcl.delivery_date和dd_lcl.delivery_date两个表的字段,但整个语句里没有指定FROM子句,也没定义这些表和主表h之间的关联关系——MySQL根本不知道这些表怎么关联到一起,这才是报错的根源。
给你修正后的完整示例,假设你的主表是h,和另外两个表通过某个字段(比如order_id)关联:
SELECT DATE_FORMAT( CASE WHEN h.load_terms = 'FCL' THEN dd_fcl.delivery_date ELSE dd_lcl.delivery_date END, '%Y %M %D' ) AS del_date FROM your_main_table h LEFT JOIN dd_fcl ON h.order_id = dd_fcl.order_id LEFT JOIN dd_lcl ON h.order_id = dd_lcl.order_id;
简单解释下:DATE_FORMAT的第一个参数只需要是合法的日期类型表达式就行,CASE语句返回的日期值完全符合要求,嵌套写法本身没有语法问题。
另外如果delivery_date字段可能存在NULL值,你可以用COALESCE给个默认值,避免DATE_FORMAT返回NULL:
SELECT DATE_FORMAT( COALESCE( CASE WHEN h.load_terms = 'FCL' THEN dd_fcl.delivery_date ELSE dd_lcl.delivery_date END, CURRENT_DATE() -- 这里可以替换成你需要的默认日期 ), '%Y %M %D' ) AS del_date FROM your_main_table h LEFT JOIN dd_fcl ON h.order_id = dd_fcl.order_id LEFT JOIN dd_lcl ON h.order_id = dd_lcl.order_id;
内容的提问来源于stack exchange,提问作者coldhands
相关产品推荐
相关产品推荐

