小编Joh*_*ohn的帖子

使用AT TIME ZONE获取指定时区的当前时间

我试图在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并返回该偏移处的日期/时间部分?

sql-server timezone

8
推荐指数
2
解决办法
3万
查看次数

如何使 Redis 缓存中数据层次结构(树)的部分内容无效

我有一些产品数据需要在 Redis 缓存中存储多个版本。数据由 JSON 序列化对象组成。获取普通(基本)数据的过程很昂贵,将其定制为不同版本的过程也很昂贵,因此我想缓存所有版本以尽可能进行优化。数据结构看起来像这样:

                                    BaseProduct
                                         /\
                                      /      \
                                   /            \
                                /                  \
                             /                        \
           CustomisedProductA                          CustomisedProductB
                  /  \                                       /  \
CustomisedProductA1  CustomisedProductA2   CustomisedProductB1  CustomisedProductB2
Run Code Online (Sandbox Code Playgroud)

这里的总体思路是:

  • 数据库中存储有一个基础产品。
  • 可以对该产品应用一种级别的定制——例如,关于销售区域的该产品的特定版本的信息。
  • 可以在其中应用第二级定制——例如关于某个区域内的特定商店的该产品的信息。

数据以这种方式存储是因为数据检索/计算过程的每个步骤都很昂贵。第一次检索某个地区的特定产品时,将执行一组定制以使其成为特定于地区的产品。第一次为商店检索特定产品时,我需要根据区域产品执行自定义以生成商店特定的产品。

问题的出现是因为我可能需要通过几种方式使数据无效:

  • 如果基础产品数据发生变化,则整个树需要失效并且所有内容都需要重新生成。我可以通过将整个结构存储在哈希中并通过其键删除哈希来实现此目的。
  • 如果产品的第一组自定义发生变化(即中间级别),那么我也需要使该级别下面的节点无效。例如,如果 CustomizedProductA 的自定义项受到更改的影响,我需要使 CustomizedProductA、CustomizedProductA1 和 CustomizedProductA2 过期。
  • 如果产品的第二组定制发生变化(即底层),则需要使该节点失效。HDEL key field我可以通过调用(例如)在哈希中实现这一点HDEL product CustomisedProductA:CustomisedProductA1。

因此,我的问题是:是否有一种方法可以表示这种类型的多级数据结构,以允许在多个级别存储数据的性能,同时仅使树的部分内容失效?或者,我是否仅限于使整个树 ( DEL key) 或特定节点 ( HDEL key field) 过期,但中间没有任何内容?

caching redis

3
推荐指数
1
解决办法
2248
查看次数

标签 统计

caching ×1

redis ×1

sql-server ×1

timezone ×1