【发布时间】:2019-06-05 06:01:14
【问题描述】:
我在 ms sql server 2014 上使用日期比较有一个奇怪的问题。
SELECT * FROM (SELECT AKTDET.*, DATEDIFF(day,aktdet.Bezahlt_am, getdate()- 50) as datumsdifferenz FROM (SELECT Convert(datetime,AKTDET.von_num - 2.0,121) as [Bezahlt_am], AKT.KENNUNG, AKTDET.* FROM AKT INNER JOIN AKTDET ON AKT.DSN = AKTDET.AKT_DSN Inner JOin FLDART ON AKTDET.Fldart_Dsn = FLDART.DSN WHERE FLDART.Kürzel = 'bezahlt am') AS AKTDET ) AS AKTDET WHERE datumsdifferenz > 0.0
每次都以“Arithmetischer Überlauffehler beim Konvertieren von expression in den datetime-Datentyp”失败。翻译:“将表达式转换为日期时间数据类型时出现算术溢出错误。”
如果我不使用 where 子句,一切都很好。怎么会这样?
SELECT * FROM (SELECT AKTDET.*, DATEDIFF(day,aktdet.Bezahlt_am, getdate()- 50) as datumsdifferenz FROM (SELECT Convert(datetime,AKTDET.von_num - 2.0,121) as [Bezahlt_am], AKT.KENNUNG, AKTDET.* FROM AKT INNER JOIN AKTDET ON AKT.DSN = AKTDET.AKT_DSN Inner JOin FLDART ON AKTDET.Fldart_Dsn = FLDART.DSN WHERE FLDART.Kürzel = 'bezahlt am') AS AKTDET ) AS AKTDET
数据似乎完全正确。所有值都是明显正确的日期值。 这是行的示例:
datumsdifferenz Bezahlt_am KENNUNG AKT_DSN
700 2016-12-21 00:00:00.000 340 690837DC-C521-47A7-B845-0B3036CADA07
391 2017-10-26 00:00:00.000 1887 27BC0276-0FAF-4787-BC69-4F7CC8F4D44A
391 2017-10-26 00:00:00.000 1887 27BC0276-0FAF-4787-BC69-4F7CC8F4D44A
392 2017-10-25 00:00:00.000 1890 102CA803-8EA7-48CB-95AE-AA2F8F686715
如果我使用
select top 80... WHERE datumsdifferenz > 0.0
也一切正常。
如果我使用
select top 90... WHERE datumsdifferenz > 0.0
它会再次抛出这些奇怪的错误。
如果我使用临时表并在之后进行比较,它会起作用吗?!
【问题讨论】:
标签: tsql datetime compare sql-server-2014