一尘不染

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

sql

我正在尝试对我的IIS日志表执行以下操作:

ALTER TABLE [W3CLog]
ADD [LogTime] AS [date] + ([time] - '1900-01-01') PERSISTED

但是,SQL Server 2008告诉我:

表'W3CLog'中的计算列'LogTime'无法保存,因为该列是不确定的。

该表具有以下定义:

CREATE TABLE [dbo].[W3CLog](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    ...
    [date] [datetime] NULL,
    [time] [datetime] NULL,
    ...
)

为什么那是不确定的?

我真的需要索引该字段。该表当前有1598170行,如果无法全时进行索引搜索,查询起来会很麻烦。由于这与其他一些日志格式实现了统一,因此我们不能非常轻松地单独使用这两列。


阅读 144

收藏
2021-05-30

共1个答案

一尘不染

'1900-01-01'不确定,因为它取决于语言设置。当然,这对于DMY或MDY设置是明确的,通常它是模棱两可的

尝试'19000101':SQL Server对日期和时间的处理有些奇怪:尽管理论上是ISO的,但如果您具有英国设置,则可以将“ yyyy-mm-
dd”视为“ yyyy-dd-mm”

编辑:使用此删除日期方面: DATEADD(day, 0, DATEDIFF(day, 0, [time]))

Edit2:1900年1月1日在日期时间格式中为零,因此无需将其减去。您可以发布样本数据并输出吗?

2021-05-30