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

或者,最有可能(在左边空白处加上0):
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_QUOTESSQL模式,则字符串文本只能在单引号内引用,因为双引号内引用的字符串被解释为标识符。
如果你想逃避双引号,那么请注意,逃避字符的方法不是加倍,而是用反斜杠预加它们。但是,如果使用单引号分隔字符串,则双引号不需要转义。

关于mysql - SQL concat_ws语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36143424/

10-12 13:08