0

无论如何我可以使用视图/内联表函数来使用包含文本和日期的字段的 where 子句中的日期范围来查询表。

日期字段数据类型为 nvarchar,包含格式为文本和文本日期dd/mm/yyyy.

我尝试使用 CTE/子查询,使用该ISDATE函数排除非日期值,使用DATEFORMATdmy 设置。这有时有效,但大多数时候会发生此错误。

Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.

我无法更改表格或系统的设计。我已经在使用多语句表函数来实现这一点,但想知道这是否可以使用内联。

这是使用 SQL Server 2008。

4

2 回答 2

1

此 Connect 项目描述了您的问题:

http://connect.microsoft.com/SQLServer/feedback/details/537419/sql-server-should-not-raise-illogical-errors

您必须始终使用 CASE 表达式包装日期(/文本混合)列,并对非日期进行 NULL 化,然后再将它们从 CTE 或子查询中传递出去。

于 2013-04-03T09:19:40.547 回答
0

最近我解决了一个类似的问题。如果适合您,请尝试此解决方案 -

DECLARE @temp TABLE (dt VARCHAR(12))

INSERT INTO @temp (dt)
VALUES 
  ('12/12/2012')
, ('13/12/2012')
, ('14/12/2012')
, ('string')
, ('14/05/2013')
, ('test/2013')

DECLARE @t TABLE (dt DATETIME)

INSERT INTO @t
SELECT dt = CONVERT(DATETIME, t.dt, 104)
FROM @temp t
WHERE t.dt LIKE '__/__/____' -- '[1-3][0-9]/[0-1][0-2]/____'

SELECT * 
FROM @t 
WHERE dt BETWEEN '20121212' AND '20121213'
于 2013-04-03T09:54:49.943 回答