Ошибка синтаксиса SQL 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 ответ

Решение

Двойные кавычки являются проблемой. Вы должны удвоить их или избежать их.

В зависимости от того, что вы намеревались, вы можете написать:

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 включен, строковые литералы могут заключаться в кавычки только в одинарных кавычках, поскольку строка, заключенная в двойные кавычки, интерпретируется как идентификатор.

Если вы намеревались избежать двойной кавычки, то обратите внимание, что способ избежать символов состоит не в удвоении их, а в добавлении к ним обратной косой черты. Однако двойные кавычки не нужно экранировать, если вы используете одинарные кавычки для разграничения вашей строки.

Другие вопросы по тегам