回答

收藏

为什么在SQL Server 2008中[日期] +([时间]-[偏移量])是不确定的?

技术问答 技术问答 152 人阅读 | 0 人回复 | 2023-09-12

我在试着对我IIS日志表执行以下操作:
6 ?; {; c; y- M& O+ k* Y1 oALTER TABLE [W3CLog]ADD [LogTime] AS [date]   ([time] - '1900-01-01') PERSISTED但是,SQL Server 2008告诉我:& W  G! s& Z. s0 C: v. w2 w1 J
表'W3CLog计算列LogTime由于该列不确定,无法保存。该表有以下定义:$ ^' q9 I$ x# V1 w4 O4 r" x1 f$ v# l8 b
CREATE TABLE [dbo].[W3CLog](    [Id] [bigint] IDENTITY(1,1) NOT NULL,   ...    [date] [datetime] NULL,   [time] [datetime] NULL,   ...)为什么不确定?0 u& Z) ?- S, p, c1 F4 X
我真的需要索引这个字段。该表目前有1598170行。如果不能全时搜索索引,查询起来会很麻烦。由于这与其他日志格式相统一,我们不能很容易地单独使用这两列。
" S7 s0 j7 Q  h6 l% H3 L1 k                                                               
1 j; z9 c: q% a; H    解决方案:                                                                1 d3 Q8 V; D; v3 @2 c# O" m
                                                                您'1900-01-01不确定,因为它取决于语言设置。当然,这是对的DMY或MDY设置清晰,通常模棱两可% {1 \# t+ I2 O/ B/ w
尝试'19000101':SQL Server处理日期和时间有点奇怪:尽管理论上是ISO的,但如果您具有英国设置,则可以将“ yyyy-mm-
" l$ ~" f1 \6 x  `dd”视为“ yyyy-dd-mm”* ^; ]4 L1 s# A6 c% t$ ^
编辑:使用此删除日期: DATEADD(day,0,DATEDIFF(day,0,[time]))
" {0 ]! e% Q% H0 `+ B  |Edit2:1900年1月1日,日期格式为零,无需减去。你能发布样本数据并输出吗?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则