Sta*_*ton 24 sql t-sql sql-server datetime sql-server-2008
使用SQL Server 2008,此查询非常有用:
select CAST(CollectionDate as DATE), CAST(CollectionTime as TIME)
from field
Run Code Online (Sandbox Code Playgroud)
给我两个这样的列:
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
.
.
.
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用加号将它们组合成单个日期时间,如下所示:
select CAST(CollectionDate as DATE) + CAST(CollectionTime as TIME)
from field
Run Code Online (Sandbox Code Playgroud)
我查看了大约十个网站,包括这个网站上的答案(就像这个),他们似乎都同意加号应该有效,但我收到错误:
消息8117,级别16,状态1,行1
操作数数据类型日期对于添加运算符无效.
所有字段都是非零且非空.我也尝试过CONVERT函数并尝试将这些结果转换为varchars,同样的问题.这不会像我做的那么难.
有人可以告诉我为什么这不起作用?谢谢你的帮助.
Aar*_*and 38
假设基础数据类型是日期/时间/日期时间等.
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), CollectionDate, 112)
+ ' ' + CONVERT(CHAR(8), CollectionTime, 108))
FROM dbo.whatever;
Run Code Online (Sandbox Code Playgroud)
如果它们不是,为什么不是,为了获得有意义的答案,您需要告诉我们它们是什么类型以及存储数据的格式.或者只是修复表格.
小智 10
简单的解决方案
SELECT CAST(CollectionDate as DATETIME) + CAST(CollectionTime as DATETIME)
FROM field
Run Code Online (Sandbox Code Playgroud)
把它投射到datetime:
select CAST(CollectionDate as DATETIME) + CAST(CollectionTime as TIME)
from field
Run Code Online (Sandbox Code Playgroud)
这适用于SQL Server 2008 R2.
如果由于某种原因你想确保第一部分没有时间组件,首先将该字段转换为日期,然后再返回datetime.
小智 7
一个更简单的解决方案(在SQL Server 2014 SP1 CU6上测试)
码:
DECLARE @Date date = SYSDATETIME();
DECLARE @Time time(0) = SYSDATETIME();
SELECT CAST(CONCAT(@Date, ' ', @Time) AS datetime2(0));
Run Code Online (Sandbox Code Playgroud)
在给定具有特定日期和特定时间字段的表的情况下,这也将起作用.我经常使用这种方法,因为我们的供应商数据在两个单独的字段中使用日期和时间.
| 归档时间: |
|
| 查看次数: |
110513 次 |
| 最近记录: |