【问题标题】:SQL concat_ws syntax errorSQL concat_ws 语法错误
【发布时间】:2016-07-08 16:37:50
【问题描述】:

我尝试运行以下 concat_ws 代码,但出现语法错误。这个sql代码有什么问题?

select count(policy_number) 
from resp_party 
where c_policy_effective_date = concat_ws('-', policy_effective_date_yyyy, 
      (lpad(policy_effective_date_mm, 2, ""00"")),
      (lpad(policy_effective_date_dd, 2, ""00"")))

【问题讨论】:

    标签: mysql concat-ws


    【解决方案1】:

    双引号是问题所在。你应该将它们解开或逃脱它们。

    根据你的意图,你可以写:

    where c_policy_effective_date = concat_ws('-', policy_effective_date_yyyy, 
          (lpad(policy_effective_date_mm, 2, '"00"')),
          (lpad(policy_effective_date_dd, 2, '"00"')))
    

    或者,最有可能(用零填充左侧):

    where c_policy_effective_date = concat_ws('-', policy_effective_date_yyyy, 
          (lpad(policy_effective_date_mm, 2, '0')),
          (lpad(policy_effective_date_dd, 2, '0')))
    

    请注意,如果您使用单引号引用字符串,则它更符合标准。来自the docs

    如果启用ANSI_QUOTES SQL 模式,则字符串文字只能在单引号内引用,因为双引号内引用的字符串被解释为标识符。

    如果您打算转义双引号,请注意转义字符的方法不是将它们加倍,而是在它们前面加上反斜杠。但是,如果您使用单引号来分隔字符串,则双引号不需要转义。

    【讨论】:

    • 非常感谢!我将双引号更改为一个引号,并且我的代码有效。其中 c_policy_effective_date = concat_ws('-', policy_effective_date_yyyy, (lpad(policy_effective_date_mm, 2, '00')), (lpad(policy_effective_date_dd, 2, '00')))
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2015-03-22
    • 2015-04-04
    • 2016-12-13
    相关资源
    最近更新 更多