Combining (concatenating) date and time into a datetime(将(连接)日期和时间组合成一个日期时间)
问题描述
使用 SQL Server 2008,此查询效果很好:
select CAST(CollectionDate as DATE), CAST(CollectionTime as TIME)来自外地给我两列这样的:
2013-01-25 18:53:00.00000002013-01-25 18:53:00.00000002013-01-25 18:53:00.00000002013-01-25 18:53:00.0000000...我正在尝试使用加号将它们组合成一个日期时间,如下所示:
select CAST(CollectionDate as DATE) + CAST(CollectionTime as TIME)来自外地我查看了大约十个网站,包括本网站上的答案(例如 这个),他们似乎都同意加号应该有效,但我收到错误:
<块引用>消息 8117,级别 16,状态 1,第 1 行
操作数数据类型日期对于加法运算符无效.
所有字段都非零且非空.我也尝试过 CONVERT 函数并尝试将这些结果转换为 varchars,同样的问题.这不会像我做的那么难.
谁能告诉我为什么这不起作用?感谢您的帮助.
假设底层数据类型是日期/时间/日期时间类型:
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), CollectionDate, 112)+ ' ' + CONVERT(CHAR(8), CollectionTime, 108))从 dbo.whatever;这会将 CollectionDate 和 CollectionTime 转换为字符序列,组合它们,然后将它们转换为 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.
Using SQL Server 2008, this query works great:
select CAST(CollectionDate as DATE), CAST(CollectionTime as TIME)
from field
Gives me two columns like this:
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
.
.
.
I'm trying to combine them into a single datetime using the plus sign, like this:
select CAST(CollectionDate as DATE) + CAST(CollectionTime as TIME)
from field
I've looked on about ten web sites, including answers on this site (like this one), and they all seem to agree that the plus sign should work but I get the error:
Msg 8117, Level 16, State 1, Line 1
Operand data type date is invalid for add operator.
All fields are non-zero and non-null. I've also tried the CONVERT function and tried to cast these results as varchars, same problem. This can't be as hard as I'm making it.
Can somebody tell me why this doesn't work? Thanks for any help.
Assuming the underlying data types are date/time/datetime types:
SELECT CONVERT(DATETIME, CONVERT(CHAR(8), CollectionDate, 112)
+ ' ' + CONVERT(CHAR(8), CollectionTime, 108))
FROM dbo.whatever;
This will convert CollectionDate and CollectionTime to char sequences, combine them, and then convert them to a datetime.
The parameters to CONVERT are data_type, expression and the optional style (see syntax documentation).
The date and time style value 112 converts to an ISO yyyymmdd format. The style value 108 converts to hh:mi:ss format. Evidently both are 8 characters long which is why the data_type is CHAR(8) for both.
The resulting combined char sequence is in format yyyymmdd hh:mi:ss and then converted to a datetime.
这篇关于将(连接)日期和时间组合成一个日期时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将(连接)日期和时间组合成一个日期时间
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- SQL 临时表问题 2022-01-01
