在我正在处理的摘录中,我有2 datetime
列.一列存储日期,另一列存储时间,如图所示.
如何查询表以将这两个字段合并为1列类型datetime
?
日期
2009-03-12 00:00:00.000 2009-03-26 00:00:00.000 2009-03-26 00:00:00.000
时
1899-12-30 12:30:00.000 1899-12-30 10:00:00.000 1899-12-30 10:00:00.000
Lieven Keers.. 245
你可以简单地添加两个.
如果在Time part
你的Date
列始终为零
并且在Date part
你的Time
栏也始终为零(基准日:1900年1月1日)
添加它们会返回正确的结果.
SELECT Combined = MyDate + MyTime FROM MyTable
SELECT Combined = MyDate + MyTime FROM MyTable
Integers
并且date
是介绍的类型time
.如果你坚持添加,你可以使用$0001 0000 + $0000 0001 =
$0001 0001
看看如何在SQL Server中将日期和时间组合到datetime2?使用SQL Server 2008及更高版本防止精度损失.
你可以简单地添加两个.
如果在Time part
你的Date
列始终为零
并且在Date part
你的Time
栏也始终为零(基准日:1900年1月1日)
添加它们会返回正确的结果.
SELECT Combined = MyDate + MyTime FROM MyTable
SELECT Combined = MyDate + MyTime FROM MyTable
Integers
并且date
是介绍的类型time
.如果你坚持添加,你可以使用$0001 0000 + $0000 0001 =
$0001 0001
看看如何在SQL Server中将日期和时间组合到datetime2?使用SQL Server 2008及更高版本防止精度损失.
如果您的日期栏的时间要素和你的时间列的日期元素均为零,然后利芬的答案是你所需要的.如果你无法保证总是如此,那么它会变得稍微复杂一些:
SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) + DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column) FROM your_table
这是一个没有任何字符转换的替代解决方案:
DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))
你只会以这种方式获得毫秒精度,但通常都可以.我在SQL Server 2008中测试了这个.
这对我有用
CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)
(在SQL 2008 R2上)
如果您没有使用SQL Server 2008(即您只有一个DateTime数据类型),您可以使用以下(粗略和准备好的)TSQL来实现您想要的:
DECLARE @DateOnly AS datetime DECLARE @TimeOnly AS datetime SET @DateOnly = '07 aug 2009 00:00:00' SET @TimeOnly = '01 jan 1899 10:11:23' -- Gives Date Only. SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly)) -- Gives Time Only. SELECT DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly) -- Concatenates Date and Time parts. SELECT CAST( DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly)) + ' ' + DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly) as datetime)
它很粗糙,准备好了,但它确实有效!
如果您的两个字段都是日期时间,那么只需添加这些字段即可.
例如:
Declare @d datetime, @t datetime set @d = '2009-03-12 00:00:00.000'; set @t = '1899-12-30 12:30:00.000'; select @d + @t
如果您使用日期和时间数据类型,则只需将时间转换为日期时间
例如:
Declare @d date, @t time set @d = '2009-03-12'; set @t = '12:30:00.000'; select @d + cast(@t as datetime)