为什么[日期]+;([time]-[offset])在SQL Server 2008中不确定?
我正在尝试对我的IIS日志表执行以下操作:为什么[日期]+;([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. 为什么这是不确定的? 我真的需要索引
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]