我试图在SQL Server 2016和Azure SQL中使用新的AT TIME ZONE语法.我只想把目前在伦敦的时间作为datetime夏令时进行调整.在运行以下所有命令时,伦敦的时间是凌晨3点27分.
第一步是获得一个datetimeoffset,我可以成功地做到如下:
DECLARE @dto datetimeoffset
SET @dto = (SELECT GETUTCDATE() AT TIME ZONE 'GMT Standard Time')
SELECT @dto
Run Code Online (Sandbox Code Playgroud)
这会返回一个我期望的值:
2016-04-04 02:27:54.0200000 +01:00
Run Code Online (Sandbox Code Playgroud)
接下来,我想将其转换为a datetime,这是我的应用程序所期望的.我尝试了三种不同的方法,其中没有一种方法可以提供我正在寻找的结果:
SELECT SWITCHOFFSET(@dto,'+00:00')
-- Returns 2016-04-04 01:27:54.0200000 +00:00
SELECT CONVERT(datetime, @dto)
-- Returns 2016-04-04 02:27:54.020
SELECT CONVERT(datetime2, @dto)
-- Returns 2016-04-04 02:27:54.0200000
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些明显的东西 - 是否有一种简单的方法来获取datetimeoffset并返回该偏移处的日期/时间部分?
我有一些产品数据需要在 Redis 缓存中存储多个版本。数据由 JSON 序列化对象组成。获取普通(基本)数据的过程很昂贵,将其定制为不同版本的过程也很昂贵,因此我想缓存所有版本以尽可能进行优化。数据结构看起来像这样:
BaseProduct
/\
/ \
/ \
/ \
/ \
CustomisedProductA CustomisedProductB
/ \ / \
CustomisedProductA1 CustomisedProductA2 CustomisedProductB1 CustomisedProductB2
Run Code Online (Sandbox Code Playgroud)
这里的总体思路是:
数据以这种方式存储是因为数据检索/计算过程的每个步骤都很昂贵。第一次检索某个地区的特定产品时,将执行一组定制以使其成为特定于地区的产品。第一次为商店检索特定产品时,我需要根据区域产品执行自定义以生成商店特定的产品。
问题的出现是因为我可能需要通过几种方式使数据无效:
HDEL key field我可以通过调用(例如)在哈希中实现这一点HDEL product CustomisedProductA:CustomisedProductA1。因此,我的问题是:是否有一种方法可以表示这种类型的多级数据结构,以允许在多个级别存储数据的性能,同时仅使树的部分内容失效?或者,我是否仅限于使整个树 ( DEL key) 或特定节点 ( HDEL key field) 过期,但中间没有任何内容?