使用Server 2008,这个查询工作得很好:
select CAST(CollectionDate as DATE), CAST(CollectionTime as TIME)
from field给了我两个像这样的列:
2013-01-25 18:53:00.0000000
2013-01-25 18:53:00.0000000
2013-01-25 18:53:00.0000000
2013-01-25 18:53:00.0000000
.
.
.我试图使用加号将它们组合成一个单一的日期时间,如下所示:
select CAST(CollectionDate as DATE) + CAST(CollectionTime as TIME)
from field我看过大约十个网站,包括这个网站上的答案(比如这一个),他们似乎都同意加号应该有效,但我得到了错误:
Msg 8117,第16级,状态1,第1行 对于add运算符,操作数数据类型日期无效。
所有字段都是非零和非空的。我也尝试过转换函数,并尝试将这些结果转换为varchars,同样的问题。这不可能像我做的那么难。
有人能告诉我为什么这不管用吗?谢谢你的帮助。
发布于 2013-09-04 19:47:19
假设底层数据类型为日期/时间/日期时间类型:
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), CollectionDate, 112)
+ ' ' + CONVERT(CHAR(8), CollectionTime, 108))
FROM dbo.whatever;这将将CollectionDate和CollectionTime转换为char序列,组合它们,然后将它们转换为datetime。
CONVERT的参数是data_type、expression和可选的style (参见语法文档)。
style值112转换为ISO yyyymmdd格式。style值108转换为hh:mi:ss格式。显然,这两个字符都有8个字符长,这就是为什么data_type对两个字符都是CHAR(8)。
生成的组合字符序列是格式yyyymmdd hh:mi:ss,然后转换为datetime。
发布于 2016-07-19 20:00:16
简单解
SELECT CAST(CollectionDate as DATETIME) + CAST(CollectionTime as DATETIME)
FROM field发布于 2016-06-08 19:32:09
一个更简单的解决方案(在Server 2014 SP1 CU6上测试)
代码:
DECLARE @Date date = SYSDATETIME();
DECLARE @Time time(0) = SYSDATETIME();
SELECT CAST(CONCAT(@Date, ' ', @Time) AS datetime2(0));这也适用于给定一个具有特定日期和特定时间域的表。我经常使用这种方法,因为我们有供应商数据,在两个单独的字段中使用日期和时间。
https://stackoverflow.com/questions/18622384
复制相似问题