我在将日期从美国时间转换为印度标准时间(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')))
但与今天的比较日期不起作用。 有人有解决方案..? 请帮帮我
谢谢..答案 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