Sql server 如何在WHERE子句中使用混合文本和日期字段?

Sql server 如何在WHERE子句中使用混合文本和日期字段?,sql-server,sql-server-2008,date,view,Sql Server,Sql Server 2008,Date,View,我可以使用view/inline table函数在where子句中使用日期范围查询表,该字段包含文本和日期 日期字段数据类型为nvarchar,包含格式为dd/mm/yyyy的文本和文本日期。 我尝试使用CTE/子查询,使用dmy的DATEFORMAT设置,使用ISDATE函数排除非日期值。这有时会起作用,但大多数情况下会发生此错误 Msg 241, Level 16, State 1, Line 3 Conversion failed when converting date and/or t

我可以使用view/inline table函数在where子句中使用日期范围查询表,该字段包含文本和日期

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

我尝试使用CTE/子查询,使用dmy的
DATEFORMAT
设置,使用
ISDATE
函数排除非日期值。这有时会起作用,但大多数情况下会发生此错误

Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.
我无法更改表或系统的设计。我已经在使用多语句表函数来实现这一点,但我想知道是否可以使用内联


这是在使用SQL Server 2008。

此连接项描述了您的问题:


在从CTE或子查询进行前,必须始终使用大小写表达式包装日期(/text mix)列,并将非日期设为NULL。

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

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'

虽然这可能会起作用,但我正在寻找使用视图或内联表函数的解决方案。这将创建一个我已经拥有的多语句函数。谢谢