如何将日期字段转换为特定时区?

时间:2015-03-20 11:19:33

标签: sql-server-2008 datetime timezone datetime-format

我在将日期从美国时间转换为印度标准时间(IST)时遇到问题 因为我的服务器时区是按美国时区划分的,印度距离我们<12> 小时..

离。今天在美国 20-03-2015 4:05:17 并且在印度 2015-03-20 16:35:17

我的数据库字段是dateOfBirth

select DateOfBirth from student

输出:

1992-09-18
1992-03-20

但是当我在我的田地里加上+12:30小时时,它正在工作

select switchoffset(CAST(DateOfBirth as datetimeoffset),'+12:30') from Student

输出

1992-09-18 08:00:00.0000000 +08:00
2015-03-20 08:00:00.0000000 +08:00

我写了这个查询,显示那些今天过生日的人的生日。

select dateofbirth from student where (dateofbirth = (switchoffset(CAST(GETDATE() as datetimeoffset),'+12:30')))

但与今天的比较日期不起作用。 有人有解决方案..? 请帮帮我

谢谢..

2 个答案:

答案 0 :(得分:1)

学生生日的不能仅在日期和月份选择

此代码返回VARCHAR MM DD

declare @monthDay VARCHAR(4) =  RIGHT('0'+cast(month(switchoffset(CAST(GETDATE() as datetimeoffset),'+12:30')) as VARCHAR(2)) ,2) +  RIGHT('0'+cast(DAY(switchoffset(CAST(GETDATE() as datetimeoffset),'+12:30')) as VARCHAR(2)) ,2)

答案 1 :(得分:0)

你的查询中有这个:     dateofbirth =(switchoffset(CAST(GETDATE()as datetimeoffset) 这使得sql寻找出生日期的完全匹配,即如果switchoffset返回24-03-2015 05:55:06 +12.30(假设),那么dob需要等于这,这是不可能的。试着将它放在一个范围内,如下所示:

DECLARE @resultAfterUsingSwitch AS DATETIMEOFFSET;
SELECT @resultAfterUsingSwitch = switchoffset(CAST(GETDATE() as   datetimeoffset),'+12:30');
DECLARE @range1 DATETIME, @range2 DATETIME;
SELECT @range1 = CONVERT(Date, @resultAfterUsingSwitch) 
SELECT @range2 = DATEADD(dd, 1, @range1)
select dateofbirth from student where dateofbirth>=@range1 AND dateofbirth<@range2