将SQL查询中的日期字段从00:00 GMT修改为12:00 GMT

将SQL查询中的日期字段从00:00 GMT修改为12:00 GMT,sql,sql-server-2008,datetime,timezone,Sql,Sql Server 2008,Datetime,Timezone,我需要调整三个查询以适应不同的时区。这些查询从前一天、日期范围和当前日期提取事务数据。服务器时间是GMT,查询当前可以根据GMT服务器时间提取事务数据。当然,这一天从格林威治标准时间00:00开始,这是一个基于服务器时间的日历日。但是,我需要查询在12:00 GMT开始一天,而不是00:00 GMT。查询如下(TransactionDate字段的数据类型为datetime): 问题1 此查询从前一天提取特定客户的交易摘要,查询的WHERE子句如下所示: WHERE TransactionDate

我需要调整三个查询以适应不同的时区。这些查询从前一天、日期范围和当前日期提取事务数据。服务器时间是GMT,查询当前可以根据GMT服务器时间提取事务数据。当然,这一天从格林威治标准时间00:00开始,这是一个基于服务器时间的日历日。但是,我需要查询在12:00 GMT开始一天,而不是00:00 GMT。查询如下(TransactionDate字段的数据类型为datetime):

问题1 此查询从前一天提取特定客户的交易摘要,查询的WHERE子句如下所示:

WHERE TransactionDate >= DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) AND TransactionDate < DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0)
WHERE TransactionDate BETWEEN @StartDateParam AND @EndDateParam
WHERE TransactionDate >= CONVERT(CHAR(10),GETDATE(),120)
问题3 最后一个查询提取当前特定客户机的交易摘要,查询的WHERE子句如下所示:

WHERE TransactionDate >= DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) AND TransactionDate < DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0)
WHERE TransactionDate BETWEEN @StartDateParam AND @EndDateParam
WHERE TransactionDate >= CONVERT(CHAR(10),GETDATE(),120)
同样,这些查询在当前GMT服务器时间内工作正常。有人能给我提供一种正确的方法来调整每个查询中datetime字段的time元素,使DayPart在格林威治标准时间15:00开始,而不是当前的格林威治标准时间00:00开始

提前感谢您的帮助。

(根据评论改写)

我建议您只使用开始部分或第二个版本进行查询

只需确保为
StartDateParam
EndDateParam
传递适合您感兴趣时区的正确值即可。您不需要执行查询中的所有转换,是吗

还要注意的是,“中间”包含了令人烦恼的终点。。。对于DATETIME字段这样的东西来说,这是一件痛苦的事情,在这里你真的想说
start(根据注释重写)

我建议您只使用开始部分或第二个版本进行查询

只需确保为
StartDateParam
EndDateParam
传递适合您感兴趣时区的正确值即可。您不需要执行查询中的所有转换,是吗


还要注意的是,“中间”包含了令人烦恼的终点。。。对于DATETIME字段这样的东西来说,这是一件痛苦的事情,在这里,你真的想说
start,为什么不直接使用查询的开始部分或第二个版本呢。只需确保为StartDateParam和EndDateParam传入适合您感兴趣的时区的正确值即可。您不需要在查询中进行所有转换,是吗?是的,您对于查询2是正确的,除了日期之外,我还可以输入实际时间值,例如15:00:00,并且根据正确的时间提取数据。但是对于查询1和查询3,我需要以某种方式指示查询使用15:00 GMT作为日部分而不是0:00 GMT来提取数据。我只是不知道如何指定15:00 GMT来代替默认的0:00 GMT。您没有领会我的意思-我建议您应该用与查询2相同的方式来表达查询1,并将查询3表示为查询2的较短版本(只是没有结束日期)。嗨,Jon,很抱歉延迟,但您的解决方案有效。如何将您的评论标记为我的问题/问题的答案?我会将其作为答案重新发布,然后您可以勾选:)为什么不将查询仅用于开始部分或第二个版本。只需确保为StartDateParam和EndDateParam传入适合您感兴趣的时区的正确值即可。您不需要在查询中进行所有转换,是吗?是的,您对于查询2是正确的,除了日期之外,我还可以输入实际时间值,例如15:00:00,并且根据正确的时间提取数据。但是对于查询1和查询3,我需要以某种方式指示查询使用15:00 GMT作为日部分而不是0:00 GMT来提取数据。我只是不知道如何指定15:00 GMT来代替默认的0:00 GMT。您没有领会我的意思-我建议您应该用与查询2相同的方式来表达查询1,并将查询3表示为查询2的较短版本(只是没有结束日期)。嗨,Jon,很抱歉延迟,但您的解决方案有效。如何将您的评论标记为我的问题/问题的答案?我会将其作为答案转发,然后您可以勾选:)