为什么[日期]+;([time]-[offset])在SQL Server 2008中不确定?

为什么[日期]+;([time]-[offset])在SQL Server 2008中不确定?,sql,sql-server-2008,deterministic,Sql,Sql Server 2008,Deterministic,我正在尝试对我的IIS日志表执行以下操作: ALTER TABLE [W3CLog] ADD [LogTime] AS [date] + ([time] - '1900-01-01') PERSISTED 但是,SQL Server 2008告诉我: Computed column 'LogTime' in table 'W3CLog' cannot be persisted because the column is non-deterministic. 为什么这是不确定的? 我真的需要索引

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

ALTER TABLE [W3CLog]
ADD [LogTime] AS [date] + ([time] - '1900-01-01') PERSISTED
但是,SQL Server 2008告诉我:

Computed column 'LogTime' in table 'W3CLog' cannot be persisted because the column is non-deterministic. 为什么这是不确定的?


我真的需要索引那个字段。该表目前有1598170行,如果我们不能在整个时间内进行索引查找,那么查询将非常困难。由于这是与其他一些日志格式的联合,我们不能很容易地单独使用这两列。

您的
'1900-01-01'
是不确定的,因为它取决于语言设置。当然,这对于DMY或MDY设置来说是明确的,但通常是不明确的

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

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


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

好的,多亏@gbn的回答,我才知道

以下三个是等效的:

SELECT TOP 100
    [date] + ([time] - '19000101'),
    [date] + ([time] - 0),
    [date] + [time]
FROM
    dbo.[W3CLog]
底部是确定性的。

您可以使用
转换(datetime,'19000101',112)
SELECT TOP 100
    [date] + ([time] - '19000101'),
    [date] + ([time] - 0),
    [date] + [time]
FROM
    dbo.[W3CLog]