SQL concat_ws语法错误

时间:2016-03-21 23:17:38

标签: mysql concat-ws

我尝试运行以下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"")))

1 个答案:

答案 0 :(得分: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模式,则只能在单引号内引用字符串文字,因为双引号内引用的字符串被解释为标识符。

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