2017-05-23 18 views
-1
SELECT AcquistionDate = CONVERT(NVARCHAR, 
         CASE 
          WHEN D.CalendarDate NOT IN ('01/01/1900','12/31/9999') 
           THEN D.CalendarDate 
          WHEN ac.FirstAccountOpenDate NOT IN ('01/01/1900', '12/31/9999') 
           THEN ac.FirstAccountOpenDate 
         END, 126) + 'Z 
from TABLE; 

を変換する文を理解しようとしています私はエラーを取得していますストアドプロシージャをデバッグし、ケース

8114メッセージ、レベル16、状態5、行1
変換エラーデータ型はvarchar

+0

CalendarDate列とFirstAccountOpenDate列のデータ型は何ですか?実際の日時フィールドですか?また、あなたのSQLは有効ではありませんが、何かがコピー/ペーストで途切れるように見えます。 –

+0

このストアドプロシージャは機能しますか?ストアプロシージャをデバッグすると、このコードを継承するのか、それともそれを記述しましたか?あなたがそれを継承した場合、実際に返されたいものを見つけ出し、最初から書き直すと言うでしょう。あなたがそれを自分で書いたのなら、あなたがここで何をしようとしているのか、私たちに教えてください。 –

+0

私は最終的にSPの別の行の問題を発見しました。私はライン1の問題であるというエラーメッセージに惑わされました。私は、SPの一時テーブルの代わりにサブクエリを使用していたので、SPの中に複数のサブクエリを持っていました。基本的にテスターのもの:) –

答えて

0

CONVERT(NVARCHAR....)日付を受け取り、フォーマット126又はyyyy-mm-ddThh:mi:ss.mmm

にNVARCHARに変換するBIGINT

しかし、あなたは+'Z from tableを持っています。これはコピー貼り間違いで、一重引用符はそこにあるはずではないと仮定します。実際には+ Z from Tableです。この場合、Zbigintと仮定します。これは、NVARCHARBIGINTに追加しようとしていることを意味します。つまり、は、最初にBIGINTに変換されようとします。これは、数値ではなく日付の文字列表現であるため失敗します。

もう1つは、コードやDB構造について詳しく知りません。実際には、の日付フィールドの1つがBIGINTであり、それを文字列の日付表現と比較すると、会話が失敗します。

しかし、Chris Bergerのコメントには、これとは非常に異なるように書かれているようです。

関連する問題