2016-03-21 24 views
1

次のconcat_wsコードを実行しようとしましたが、構文エラーが発生しました。このsqlコードで何が問題になっていますか?SQL concat_ws構文エラー

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

あなたが意図した内容に応じて、あなたは書き込みのいずれかの可能性あなたは一重引用符で文字列を引用します。 the docsからのよう:

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

二重引用符をエスケープする場合は、文字をエスケープする方法は倍音ではなく、バックスラッシュを接頭辞として使用することに注意してください。ただし、文字列の区切りにシングルクォートを使用する場合は、二重引用符でエスケープする必要はありません。

+0

ありがとうございました!二重引用符を一引用符だけに変更し、コードが機能します。どこc_policy_effective_date = CONCAT_WS( ' - '、policy_effective_date_yyyy、 (LPAD(policy_effective_date_mm、2、 '00'))、 (LPAD(policy_effective_date_dd、2、 '00'))) – DP8

+0

あなたの第二の答えも動作します!驚くばかり! – DP8