1

UNION ALL1 つのテーブル (UNIONコマンドによって結合されるテーブル)を使用してパディングする必要がある場合、SQL Server (T-SQL) の奇妙な動作に直面しています。

表1:

Firstname  Lastname  Date
---------  --------  ----
Peter      Pan       2013-01-21 12:29:55.000
Paul       Am        2013-01-22 12:39:45.000

および表 2:

FN         LN
---------  --------
Laura      Loeb
Lisa       Lefteye

UNION ALL両方のテーブルにa を実行したい。これは、次のように、表 2 を「偽の」3 番目の列で「パディング」することによってのみ達成できます (「データ」列がないため)。

SELECT
  Firstname AS FName, Lastname AS LName, Date AS TheDate
FROM Table1

UNION ALL

SELECT
  FN AS FName, LN AS LName, NULL AS TheDate
FROM Table2

私の問題は次のとおりです。SQL Server から、DateTime型にキャストできないというエラー メッセージが表示されます。

DateTable1の列のデータ型が に設定されていることは 100% 確信していDateTimeます。NULL 値も許可されています。

次のように、ダミーの日付を設定してみました。

... FN AS FName, LN AS LName, '2013-03-08' AS TheDate ...

次のように、現在の日付を設定しようとしました。

... FN AS FName, LN AS LName, getdate() AS TheDate ...

上記のいずれも機能しません。

ただし、一般的な解決策(「NULL AS Columnname」を使用して欠落している列を埋め込む)が機能することはわかっています...

誰もその問題を解決する方法を知っていますか?

事前にどうもありがとうございました!

4

2 に答える 2

3

何が問題なのかわからない...

SELECT '1' A, '2' B, GETDATE() C
UNION ALL
SELECT '1', '2', NULL

戻り値

| | あ | ビ | シー |
--------------------------------------------
| | 1 | 2 | 2013 年 3 月 8 日 16:34:31+0000 |
| | 1 | 2 | (ヌル) |

あなたは試しましたかCASTNULL

于 2013-03-08T16:35:14.950 に答える
1

すでに投稿したものは正常に機能します。

SELECT 'Frank' As 'Name', 'Grimes' as 'Name2', GETDATE() as 'TheDate'
UNION ALL
SELECT 'Jim' As 'Name', 'Bloggs' as 'Name2', null as 'TheDate'
于 2013-03-08T16:39:06.273 に答える