2017-08-31 10 views
0

HSQLDBに格納されたデータに対してこの文を実行しようとすると、"文字列データ、右切り捨て"例外が発生します。選択中に文字列データ、右切り捨てエラーがスローされました

select case 
      when InquiryDate = '' then '' 
      WHEN InquiryDate like '%NOTDATE%' then 'UNKNOWN' 
      else TO_CHAR(TO_DATE(InquiryDate,'MMDDYY'), 'YYYYMMDD') 
     end as "InquiryDate" 
from T_INQUIRY 

何故でしょうか? InquiryDateフィールドは、VARCHAR(1000)

+0

はTABLE_NAME =「T_INQUIRY'' INFORMATION_SCHEMA.COLUMNS SELECT * FROMとVARCHAR型の列の大きさを再確認 '実行してください。 –

+0

は、私はそれがVARCHAR(1000)上記のクエリ INQUIRYDATE CHARACTER VARYING 1000年 coderJack

+0

してください** [編集] **あなたの質問を使用しており、追加しないことを確認しました* *正確な**エラーメッセージとエラーをトリガするJavaコード。あなたの質問はコメントにコードや追加情報を追加するのですか –

答えて

0

と定義されています。最新のHSQLDB(2.35/2.40)でクエリは正常に動作します。

使用しているバージョンで動作するようにするには、文字列リテラルの1つをVARCHARにキャストします。例えば:

select case 
     when InquiryDate = '' then CAST('' AS VARCHAR(8)) 
     WHEN InquiryDate like '%NOTDATE%' then 'UNKNOWN' 
     else TO_CHAR(TO_DATE(InquiryDate,'MMDDYY'), 'YYYYMMDD') 
    end as "InquiryDate" 
from T_INQUIRY 

InquiryDate直接戻り値として使用されていません。あなたのバージョンでは空文字列の型と 'UNKNOWN'が使用されます。これはVARCHARではなくCHARです。

あなたが直接列の値を使用する場合にも動作するはずです:

select case 
     when InquiryDate = '' then InquiryDate 
     WHEN InquiryDate like '%NOTDATE%' then 'UNKNOWN' 
     else TO_CHAR(TO_DATE(InquiryDate,'MMDDYY'), 'YYYYMMDD') 
    end as "InquiryDate" 
from T_INQUIRY 
+0

ありがとう!私はちょうど最近のHSQL - 2.4を使用しました、そして、私のためにそのトリックをするように見えました。 – coderJack

関連する問題