如果您正在使用日期時間 在運行一個方法窗戶
declare @date varchar(100)
select @date = '2009-06-26 14:30:00.000'
select dateadd(hh,datediff(hh,getdate(),getutcdate()),@date)
輸出 2009-06-26 18:30:00.000
最好只用GETUTCDATE()所有的時間和存儲用戶在他的個人資料偏移
SQL Server 2008有新datetimeoffset數據類型使這很容易
現在這裏是一個答案,將與你(我加了半小時代碼也)
代碼是如何工作的,這裏解釋了處理數據:Adding time offsets passed in to a datetime to generate localized datetime
這裏
declare @date varchar(100),@multiplier int
select @date = '2009-06-26 14:30:00.000Z+4:30'
select @multiplier = case when @date like '%+%' then -1 else 1 end
select dateadd(mi, @multiplier *convert(int,right(@date,2)),dateadd(hh
,-1 * convert(int,replace(substring(@date,patindex('%z%',@date)+ 1,3),':',''))
,left(@date,23)))
go
--2009-06-26 10:00:00.000
declare @date varchar(100),@multiplier int
select @date = '2009-06-26 14:30:00.000Z-4:30'
select @multiplier = case when @date like '%+%' then -1 else 1 end
select dateadd(mi, @multiplier *convert(int,right(@date,2)),dateadd(hh
,-1 * convert(int,replace(substring(@date,patindex('%z%',@date)+ 1,3),':',''))
,left(@date,23)))
go
--2009-06-26 19:00:00.000
declare @date varchar(100),@multiplier int
select @date = '2009-06-26 14:30:00.000Z+14:30'
select @multiplier = case when @date like '%+%' then -1 else 1 end
select dateadd(mi, @multiplier *convert(int,right(@date,2)),dateadd(hh
,-1 * convert(int,replace(substring(@date,patindex('%z%',@date)+ 1,3),':',''))
,left(@date,23)))
go
--2009-06-26 01:00:00.000
declare @date varchar(100),@multiplier int
select @date = '2009-06-26 14:30:00.000Z-14:30'
select @multiplier = case when @date like '%+%' then -1 else 1 end
select dateadd(mi, @multiplier *convert(int,right(@date,2)),dateadd(hh
,-1 * convert(int,replace(substring(@date,patindex('%z%',@date)+ 1,3),':',''))
,left(@date,23)))
go
--2009-06-27 05:00:00.000
有什麼不對存儲的數據爲日期? – 2009-06-26 17:26:10
給定的字符串不能被轉換; SQL Server出現此錯誤:「從字符串轉換日期時間時轉換失敗。」 – 2009-06-26 18:22:28
「可能是ISO」或_is_ ISO?選擇一種格式會更好。 – 2009-06-26 18:27:02