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

文字列を一重引用符で囲むと、より標準に準拠することに注意してください。ドキュメントからのように:

SQL モードが有効な場合、ANSI_QUOTES二重引用符で囲まれた文字列は識別子として解釈されるため、文字列リテラルは単一引用符でのみ引用できます。

二重引用符をエスケープする場合は、文字を二重にするのではなく、前にバックスラッシュを付けることで文字をエスケープすることに注意してください。ただし、文字列を区切るために単一引用符を使用する場合、二重引用符をエスケープする必要はありません。

于 2016-03-21T23:23:13.143 に答える