1

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

1 回答 1

2

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

根据您的意图,您可以编写:

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')))

请注意,如果您用单引号引用字符串,则它更符合标准。从文档

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

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

于 2016-03-21T23:23:13.143 回答