无论如何,我可以使用视图/内联表函数在包含文本和日期的字段的where子句中使用日期范围来查询表。
日期字段数据类型为nvarchar,包含格式dd/mm/yyyy.
我尝试使用ISDATE
函数使用CTE /子查询来排除非日期值,使用dmy的DATEFORMAT
设置。这有时会起作用,但大部分时间都会发生此错误。
Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.
我无法改变表格或系统的设计。我已经使用多语句表函数来实现这一点,但想知道这是否可以使用内联。
这是使用SQL Server 2008。
答案 0 :(得分:1)
此Connect项目描述了您的问题:
您必须始终使用CASE表达式包装日期(/ text mix)列,并且在从CTE或子查询向前传送之前将NULL表示为非日期。
答案 1 :(得分: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'