Sql 添加时间和日期
我在MSSQL 2008 R2中有两列:Sql 添加时间和日期,sql,sql-server,date,sql-server-2008-r2,Sql,Sql Server,Date,Sql Server 2008 R2,我在MSSQL 2008 R2中有两列:Workingdate和Startime。 由于应用程序设计中的错误,starttime未定义为日期+时间,而仅定义为时间(例如下午4:00时的1899-12-30 16:00:00.000) 现在,我面临一个无法添加日期和时间的问题 为什么 select convert(datetime,'2015-07-01 00:00:00.000') + convert(datetime,'1899-12-30 16:00:00.000') 2015-06-2
Workingdate
和Startime
。
由于应用程序设计中的错误,starttime未定义为日期+时间,而仅定义为时间(例如下午4:00时的1899-12-30 16:00:00.000
)
现在,我面临一个无法添加日期和时间的问题
为什么
select convert(datetime,'2015-07-01 00:00:00.000') + convert(datetime,'1899-12-30 16:00:00.000')
2015-06-29 16:00:00.000 and not 2015-07-01 16:00:00.000
谢谢你的帮助
抱歉:我找到了解决方案:日期来自VBA,第一天是1899-12-30,而不是SQL中的1900-01-01!!!因此,我必须添加+2 通常情况下,我会一直使用这种类型的操作 希望它有帮助试试这个:
select dateadd(second,
datepart(hour,'1899-12-30 16:00:00.000') * 3600 +
datepart(minute,'1899-12-30 16:00:00.000') * 60 +
datepart(second,'1899-12-30 16:00:00.000'),
'2015-07-01 00:00:00.000')
其思想是使用函数将所需的时间(以秒为单位)添加到基准日期(2015-07-01 00:00:00.000
)。为了将记录时间转换为秒,我们使用函数three time从记录日期中提取小时、分钟和秒
要确定表中的日期,可以使用以下内容:
UPDATE [dbo].[MyTable]
SET [Date] = DATEADD(SECOND, DATEPART(HOUR, [Date]) * 3600 + DATEPART(MINUTE, [Date]) * 60 + DATEPART(SECOND, [Date], '2015-07-01 00:00:00.000');
SELECT
cast('1899-12-30 16:00:00.000' as time)+
cast('2015-07-01 00:00:00.000' as datetime)
您无法轻松使用dateadd进行此操作,简单的方法是将一列的时间与另一列的datetime相加,如下所示:
UPDATE [dbo].[MyTable]
SET [Date] = DATEADD(SECOND, DATEPART(HOUR, [Date]) * 3600 + DATEPART(MINUTE, [Date]) * 60 + DATEPART(SECOND, [Date], '2015-07-01 00:00:00.000');
SELECT
cast('1899-12-30 16:00:00.000' as time)+
cast('2015-07-01 00:00:00.000' as datetime)
结果:
2015-07-01 16:00
你不应该在没有提供示例的情况下发布这样的答案。特别是因为DATEADD在本例中不是一个简单的解决方案,有趣的是,它是正确的,尽管选择CAST(CONVERT(datetime,'1899-12-30 16:00:00.000')作为float是否定的!谢谢为什么要将日期时间转换为浮点?这总是可以用更好的方法来完成。我只是将其转换为检查数值。我如何在Oracle中实现这一点?是的,我知道,但我必须更改应用程序中的所有代码。。。!