首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将日期和时间合并成日期时间

将日期和时间合并成日期时间
EN

Stack Overflow用户
提问于 2013-09-04 19:39:30
回答 11查看 190.5K关注 0票数 31

使用Server 2008,这个查询工作得很好:

代码语言:javascript
运行
复制
select CAST(CollectionDate as DATE), CAST(CollectionTime as TIME)
from field

给了我两个像这样的列:

代码语言:javascript
运行
复制
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
    .
    .
    .

我试图使用加号将它们组合成一个单一的日期时间,如下所示:

代码语言:javascript
运行
复制
select CAST(CollectionDate as DATE) + CAST(CollectionTime as TIME)
from field

我看过大约十个网站,包括这个网站上的答案(比如这一个),他们似乎都同意加号应该有效,但我得到了错误:

Msg 8117,第16级,状态1,第1行 对于add运算符,操作数数据类型日期无效。

所有字段都是非零和非空的。我也尝试过转换函数,并尝试将这些结果转换为varchars,同样的问题。这不可能像我做的那么难。

有人能告诉我为什么这不管用吗?谢谢你的帮助。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-09-04 19:47:19

假设底层数据类型为日期/时间/日期时间类型:

代码语言:javascript
运行
复制
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), CollectionDate, 112) 
  + ' ' + CONVERT(CHAR(8), CollectionTime, 108))
  FROM dbo.whatever;

这将将CollectionDateCollectionTime转换为char序列,组合它们,然后将它们转换为datetime

CONVERT的参数是data_typeexpression和可选的style (参见语法文档)。

style112转换为ISO yyyymmdd格式。style108转换为hh:mi:ss格式。显然,这两个字符都有8个字符长,这就是为什么data_type对两个字符都是CHAR(8)

生成的组合字符序列是格式yyyymmdd hh:mi:ss,然后转换为datetime

票数 60
EN

Stack Overflow用户

发布于 2016-07-19 20:00:16

简单解

代码语言:javascript
运行
复制
SELECT CAST(CollectionDate as DATETIME) + CAST(CollectionTime as DATETIME)
FROM field
票数 19
EN

Stack Overflow用户

发布于 2016-06-08 19:32:09

一个更简单的解决方案(在Server 2014 SP1 CU6上测试)

代码:

代码语言:javascript
运行
复制
DECLARE @Date date = SYSDATETIME();

DECLARE @Time time(0) = SYSDATETIME();

SELECT CAST(CONCAT(@Date, ' ', @Time) AS datetime2(0));

这也适用于给定一个具有特定日期和特定时间域的表。我经常使用这种方法,因为我们有供应商数据,在两个单独的字段中使用日期和时间。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18622384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档