我正在尝试对我的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行,如果无法全时进行索引搜索,查询起来会很麻烦。由于这与其他一些日志格式实现了统一,因此我们不能非常轻松地单独使用这两列。
您'1900-01-01'不确定,因为它取决于语言设置。当然,这对于DMY或MDY设置是明确的,通常它是模棱两可的
'1900-01-01'
尝试'19000101':SQL Server对日期和时间的处理有些奇怪:尽管理论上是ISO的,但如果您具有英国设置,则可以将“ yyyy-mm- dd”视为“ yyyy-dd-mm”
'19000101'
编辑:使用此删除日期方面: DATEADD(day, 0, DATEDIFF(day, 0, [time]))
DATEADD(day, 0, DATEDIFF(day, 0, [time]))
Edit2:1900年1月1日在日期时间格式中为零,因此无需将其减去。您可以发布样本数据并输出吗?