Sql server 用自定义时间替换时间部分
我有一个场景,其中我必须匹配系统时间,但我必须使用sql server中预设的saved datetime变量匹配当前时间Sql server 用自定义时间替换时间部分,sql-server,sql-server-2008,datetime,sql-server-2005,Sql Server,Sql Server 2008,Datetime,Sql Server 2005,我有一个场景,其中我必须匹配系统时间,但我必须使用sql server中预设的saved datetime变量匹配当前时间 DECLARE @SyncDate AS DATETIME DECLARE @SystemDate AS DATETIME SELECT @SyncDate = dbo.TimeTable.auto_time FROM dbo.TimeTable '1900-01-01 03:00 SELECT @SystemDate = GETDATE() 我必须用当
DECLARE @SyncDate AS DATETIME
DECLARE @SystemDate AS DATETIME
SELECT @SyncDate = dbo.TimeTable.auto_time
FROM dbo.TimeTable
'1900-01-01 03:00
SELECT @SystemDate = GETDATE()
我必须用当前日期和已保存的时间替换@SyncDate
,即:
2015-11-16 03:00
任何主体都可以提供帮助?您可以直接在SQL Server 2008+中的
日期时间
值中添加时间
值。但是对于SQL Server 2005,您可以使用DATETIME
操作,例如DATEADD
和DATEDIFF
:
对于SQL Server 2008:
DECLARE @SyncDate DATETIME = CAST('1900-01-01 03:00' AS DATETIME)
SELECT
CAST(CAST(GETDATE() AS DATE) AS DATETIME) + CAST(@SyncDate AS TIME)
对于SQL Server 2005:
DECLARE @SyncDate DATETIME
SET @SyncDate = CAST('1900-01-01 03:00' AS DATETIME)
SELECT
DATEADD(
MILLISECOND,
DATEDIFF(MILLISECOND, CAST(@SyncDate AS DATE), @SyncDate),
CAST(CAST(GETDATE() AS DATE) AS DATETIME)
)
您可以使用:
DECLARE @SyncDate AS DATETIME = GETDATE();
DECLARE @SystemDate AS DATETIME = '1900-01-01 03:00' --saved time
SELECT DATEADD(day, DATEDIFF(day,'19000101',CAST(@SyncDate AS DATE)), CAST(CAST(@SystemDate AS TIME) AS DATETIME));
DECLARE @SyncDate AS DATETIME = GETDATE();
DECLARE @SystemDate AS DATETIME = '1900-01-01 03:00'
SELECT DATEADD(day, DATEDIFF(day,'19000101',CAST(@SyncDate AS DATE)), @SystemDate);
输出:
2015-11-16 03:00:00
如果保存的时间始终为1900-01-01 hh:mm:ss
格式,则可以使用:
DECLARE @SyncDate AS DATETIME = GETDATE();
DECLARE @SystemDate AS DATETIME = '1900-01-01 03:00' --saved time
SELECT DATEADD(day, DATEDIFF(day,'19000101',CAST(@SyncDate AS DATE)), CAST(CAST(@SystemDate AS TIME) AS DATETIME));
DECLARE @SyncDate AS DATETIME = GETDATE();
DECLARE @SystemDate AS DATETIME = '1900-01-01 03:00'
SELECT DATEADD(day, DATEDIFF(day,'19000101',CAST(@SyncDate AS DATE)), @SystemDate);
我已经完成了一个通用查询,即自由格式版本检查或版本依赖
DECLARE @SyncDate AS DATETIME = '1900-01-01 03:00'
DECLARE @SystemDate AS DATETIME = GETDATE() ;
SELECT @SyncDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @SystemDate))
+ CONVERT(VARCHAR(8), @SyncDate, 108)
SELECT @SyncDate
对于SqlServer 2016,2020年在座的人员:
DECLARE @SyncDate DATETIME = CAST('1900-01-01 03:00' AS DATETIME)
SELECT
CAST(CAST(GETDATE() AS DATE) AS DATETIME) + CAST(@SyncDate AS DATETIME)
输出
2020-11-26 03:00:00.0
PS:查询是在2020年11月26日运行的。什么版本的sql server?sql server 2008,2005尝试以下操作:
选择CAST(CAST(GETDATE()AS DATE)AS DATETIME)+CAST(@SyncDate AS TIME)
@FelixPamittan:这将在sql server 2008及更新版本中运行-但在2005年将失败,因为DATE
和TIME
在2005年是未知类型(仅在2008年推出)@marc_s,是的。我在下面添加了一个适用于2005年的答案。什么是不工作。请确保在2005年运行SQL Server 2008版本时删除它。请参阅我的编辑。