2013-04-03 16 views
0

有無論如何我可以使用一個視圖/行內表函數來查詢一個表中使用日期範圍在一個字段,其中包含文本和日期的where子句。如何在WHERE子句中使用混合文本和日期字段?

日期字段的數據類型爲nvarchar的,包含格式dd/mm/yyyy.

我一直在使用使用ISDATE功能,以排除非日期值,使用DATEFORMAT設置DMY的CTE /子查詢嘗試文本和文本日期。這有時會起作用,但大部分時間發生此錯誤。

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

我不能改變表或系統的設計。我已經在使用多語句表函數來實現這一點,但想知道這是否可以使用內聯。

這是使用SQL Server 2008

回答

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' 
+0

雖然這可能工作,我正在尋找一個解決方案使用視圖或內聯表函數。這將創建一個我已經擁有的多語句函數。謝謝。 – mheptinstall

相關問題