我尝试运行以下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"")))
答案 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模式,则只能在单引号内引用字符串文字,因为双引号内引用的字符串被解释为标识符。
如果你打算逃避双引号,那么请注意,转义字符的方法不是将它们加倍,而是用反斜杠加前缀。但是,如果使用单引号来分隔字符串,则双引号不需要转义。