【问题标题】:SQL Server Type Cast for DateTime field and UNION ALL日期时间字段和 UNION ALL 的 SQL Server 类型转换
【发布时间】:2013-03-08 16:31:45
【问题描述】:

在使用UNION ALL 并且必须填充一个表(由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。这只能通过使用“假”第三列“填充”表 2 来实现(因为它没有“数据”列),如下所示:

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 类型。

我 100% 确定表 1 中列 Date 的数据类型设置为 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”填充缺失的列)有效...

有人知道如何解决这个问题吗?

非常感谢您!

【问题讨论】:

  • 只有当我尝试用 NULL 或虚拟日期或 getdate() 填充 DateTime 类型的列时才会发生这种情况。如果我尝试填充 vchar 或 bit 类型的列,一切正常...
  • 非常感谢,花了半天的时间试图找到错误后,我发现了:我不知道使用UNION ALL时SELECTed Columns必须处于相同的顺序.

标签: sql-server datetime casting union union-all


【解决方案1】:

不知道是什么问题...

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

退货

|一个 |乙| C | -------------------------------------- | 1 | 2 | 2013 年 3 月 8 日 16:34:31+0000 | | 1 | 2 | (空)|

你试过CAST你的NULL吗?

【讨论】:

  • 您好 Aarolama Bluenk,感谢您的帮助!我刚刚检查过,并且 ... SELECT CAST(NULL AS DATETIME) AS TheDate ... 仍然给我同样的错误(消息 241,第 16 级,状态 1,第 1 行)...
  • 发现错误 - 请参阅我对我的问题的最后评论。再次感谢您的帮助(确认我至少得到了正确的填充部分)。
【解决方案2】:

您已经发布的内容正常。

SELECT 'Frank' As 'Name', 'Grimes' as 'Name2', GETDATE() as 'TheDate'
UNION ALL
SELECT 'Jim' As 'Name', 'Bloggs' as 'Name2', null as 'TheDate'

【讨论】:

  • 您好 CathaMF,感谢您的帮助。我刚刚检查了我使用语句的视图是否会导致问题。但事实并非如此......仍在寻找解决方案,并且一无所知。感谢您确认至少我的想法是正确的。
  • 发现错误 - 请参阅我对我的问题的最后评论。再次感谢您的帮助(确认我至少得到了正确的填充部分)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2017-06-27
  • 1970-01-01
  • 2020-01-02
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多