Sql server 如何在WHERE子句中使用混合文本和日期字段?
我可以使用view/inline table函数在where子句中使用日期范围查询表,该字段包含文本和日期 日期字段数据类型为nvarchar,包含格式为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
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'
虽然这可能会起作用,但我正在寻找使用视图或内联表函数的解决方案。这将创建一个我已经拥有的多语句函数。谢谢