2017-11-01 21 views
0

日時フィールドを変換してNULLを取り除こうとすると、datetimeを変換できないというエラーが発生します。スケジュールされた日時変換エラー(SQL)

このクエリは、列データ型が日付である別のデータベースにデータを設定しています。

このジョブはスケジュールされていないと完全に正常に実行されますが、スケジュールされた挿入ジョブ中にエラーが発生します。

アイデア?

, (SELECT 
     CASE 
      WHEN MIN([Discount Ledger].[Posting Date]) IS NOT NULL 
      THEN CONVERT(VARCHAR(50), MIN([Discount Ledger].[Posting Date]), 121) 
      ELSE '-' 
     END 
    FROM 
     [Wings$Discount Ledger Entry] AS "Discount Ledger" 
    LEFT JOIN 
     [Wings$Periodic Discount] AS "MixMatchHeader" ON [Discount Ledger].[Offer No_] = [MixMatchHeader].[No_] 
    LEFT JOIN 
     [Wings$Periodic Discount Line] AS "MixMatch" ON [MixMatchHeader].[No_] = [MixMatch].[Offer No_] 
    LEFT JOIN 
     [Wings$Item_Special Group Link] AS "Special Group" ON [MixMatch].[No_] = [Special Group].[Special Group Code] 
    LEFT JOIN 
     [Wings$Store Price Group] AS "Store Price Group" ON [MixMatch].[Price Group] = [Store Price Group].[Price Group Code] 
    WHERE 
     [MixMatch].[No_] = [Item Ledger].[Item No_] 
     AND [MixMatch].[Variant Code] = [Item Ledger].[Variant Code] 
     AND [Store Price Group].[Store] = [Item Ledger].[Location Code]) AS "Discount Start Date" 

答えて

0

これはISNULLを使用して行うことができます。 MINの日付を探しているので、NULLの引数/置換値としてGETDATE()を使用します。あなたのデータに将来の日付がない限り、GETDATE()MAXの値として機能するはずです。 CASEステートメントでNULLの値をMINと評価しない限り、その場合は、の代わりに空の文字列''または'1900-01-01'を使用できます。

, (SELECT 
CASE 
WHEN 
MIN([Discount Ledger].[Posting Date]) IS NOT NULL 
THEN CONVERT(varchar(50),MIN(ISNULL([Discount Ledger].[Posting Date],GETDATE())),121) 
ELSE '-' 
END 
FROM [Wings$Discount Ledger Entry] AS "Discount Ledger" 
LEFT JOIN [Wings$Periodic Discount] AS "MixMatchHeader" ON [Discount Ledger].[Offer No_] = [MixMatchHeader].[No_] 
LEFT JOIN [Wings$Periodic Discount Line] AS "MixMatch" ON [MixMatchHeader].[No_] = [MixMatch].[Offer No_] 
LEFT JOIN [Wings$Item_Special Group Link] AS "Special Group" ON [MixMatch].[No_] = [Special Group].[Special Group Code] 
LEFT JOIN [Wings$Store Price Group] AS "Store Price Group" ON [MixMatch].[Price Group] = [Store Price Group].[Price Group Code] 
WHERE [MixMatch].[No_] = [Item Ledger].[Item No_] AND [MixMatch].[Variant Code] = [Item Ledger].[Variant Code] AND [Store Price Group].[Store] = [Item Ledger].[Location Code]) 
AS "Discount Start Date" 
+0

こんにちはJacob、感謝のために応答します。私の目標は、NULLか '1900-01-01'を取り除くことです。日付が空白の場合は、 ' - 'を表示するか、 'NONE'としますが、その結果、範囲外の値になります。その他の提案はありますか? –

+0

表示された値はフロントエンドで処理されることがよくあります。これはレポートやエクセルなどにエクスポートするためのものですか? –

+0

Imダンプ結果はこのクエリを別のSQLデータベースに変換し、2番目のデータベースに直接接続しています。セルに「空白」または「1900-01-01」と表示されています。 –

関連する問題