在我正在处理的一个摘录中,我有2datetime个专栏.一列存储日期,另一列存储时间,如图所示.

如何查询该表以将这两个字段合并为类型为datetime的一列?

Dates

2009-03-12 00:00:00.000
2009-03-26 00:00:00.000
2009-03-26 00:00:00.000

Times

1899-12-30 12:30:00.000
1899-12-30 10:00:00.000
1899-12-30 10:00:00.000

推荐答案

你可以简单地把两者相加.

  • if Date列中的Time part始终为零
  • and Time列的Date part也总是零(base date: January 1, 1900)

添加它们将返回正确的结果.

SELECT Combined = MyDate + MyTime FROM MyTable

理由(埃里克/德诺兰的荣誉)

它是这样工作的,因为日期是以两个4字节的形式存储的

编辑有关新SQL Server 2008类型的信息

DateTime是在SQL Server 2008中引入的类型.如果你坚持添加,你可以使用Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)

Edit2关于SQL Server 2008及更高版本的精度损失(马丁·史密斯)

请看一下How to combine date and time to datetime2 in SQL Server?,以防止使用SQL Server 2008及更高版本造成精度损失.

Sql相关问答推荐

我如何计算字母a出现的字符串的次数?

解析SQL Server中的嵌套JSON

BigQuery-当子查询不返回任何结果时,所有结果为零

使用generate_series()时,LEFT联接缺少日期/间隔

基于是否具有某些数据的关联表覆盖SELECT语句中的列值

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

属于(日期)范围类型及其交集的总权重​

TSQL如何为群分配号码

在Athena中使用regexp提取括号前的字符串值

PostgreSQL:查找继承表中的特定记录属于哪个表

在WHERE EXISTS子查询中,列返回是否重要?

提取连续时间戳范围的SQL

SQL:使用年/月/日分区查询某个时间段的数据

将最近的结束日期与开始日期相匹配

列(值不为空)到其他有序列

获取所有用户的第一次和最后一次发货以及到达日期

比使用NOT EXISTS更高效的SQL删除方法是什么?

Oracle函数中无法动态迭代创建的SYS_REFCURSOR

有没有一种方法可以将始终遵循序列的单个字段的值组合起来,以创建每个 ID 的所有移动?

连接表时避免重复