SELECT 按日期时间的日期时间偏移字段
SELECT a datetimeoffset field by datetime
我有一个 table,其中的 datetimeoffset 字段是主键。我想用日期时间过滤 table。
例如我的 table 有:
2016-04-27 23:30:00.7684500 +03:00
2016-04-28 00:30:00.7684500 +03:00
在本地时间格式中,第一行表示 2016-04-28 02:30:00,第二行表示 2016-04-28 03:30:00。我的意思是其中两个日期:2016-04-28。
当我想报告日期为 2016-04-28 的交易时,我只得到第二行。
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dto > @fromDate
因为,sql查看 datetimeoffset 字段中的 UTC 时间。
我可以这样得到我真正想要的:
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where CAST(dto as datetime) > @fromDate
第一排和第二排来了。
问题是:转换是否会影响性能?系统查找并转换每一行(顺序读取),即使 dto 是主键?
有没有更好的方法?
非常感谢...
绝对...我建议将计算字段添加到 table。这样,转换会在 SQL 中自动进行,并且查询中不需要 CAST 或 CONVERT。搜索计算字段并插入您的代码
CONVERT(DATETIME, dto, 109)
或
TRY_CONVERT(DATETIME, dto, 109)
我会使用 TRY_CONVERT,因为您可以专门为新的计算字段设置 DateTime 的格式,如果由于某种原因 dto 不是有效日期,它将插入 NULL 而不是失败。
如果你的偏移量(+3)是一个常数,你可以试试这个:
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dateadd(hour, 3, dto) > @fromDate
或者您可以使用 TODATETIMEOFFSET
如下:
select * from MYTABLE where TODATETIMEOFFSET(dto, '03:00') > @fromDate
我有一个 table,其中的 datetimeoffset 字段是主键。我想用日期时间过滤 table。
例如我的 table 有:
2016-04-27 23:30:00.7684500 +03:00
2016-04-28 00:30:00.7684500 +03:00
在本地时间格式中,第一行表示 2016-04-28 02:30:00,第二行表示 2016-04-28 03:30:00。我的意思是其中两个日期:2016-04-28。
当我想报告日期为 2016-04-28 的交易时,我只得到第二行。
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dto > @fromDate
因为,sql查看 datetimeoffset 字段中的 UTC 时间。
我可以这样得到我真正想要的:
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where CAST(dto as datetime) > @fromDate
第一排和第二排来了。
问题是:转换是否会影响性能?系统查找并转换每一行(顺序读取),即使 dto 是主键?
有没有更好的方法?
非常感谢...
绝对...我建议将计算字段添加到 table。这样,转换会在 SQL 中自动进行,并且查询中不需要 CAST 或 CONVERT。搜索计算字段并插入您的代码
CONVERT(DATETIME, dto, 109)
或
TRY_CONVERT(DATETIME, dto, 109)
我会使用 TRY_CONVERT,因为您可以专门为新的计算字段设置 DateTime 的格式,如果由于某种原因 dto 不是有效日期,它将插入 NULL 而不是失败。
如果你的偏移量(+3)是一个常数,你可以试试这个:
declare @fromDate datetime
select @fromDate = '2016-04-28 00:00:00'
select * from MYTABLE where dateadd(hour, 3, dto) > @fromDate
或者您可以使用 TODATETIMEOFFSET
如下:
select * from MYTABLE where TODATETIMEOFFSET(dto, '03:00') > @fromDate