SQL concat_ws 语法错误

SQL concat_ws syntax error

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

双引号是问题所在。你应该解开它们或转义它们。

根据您的意图,您可以这样写:

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 开始:

If the ANSI_QUOTES SQL mode is enabled, string literals can be quoted only within single quotation marks because a string quoted within double quotation marks is interpreted as an identifier.

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