2011-04-20 40 views
1

在SQL Server 2005數據庫中,表的nvarchar列包含datetime或某個字符串值。例如03/11/2011 4:00:07 AMCompleted如何把日期時間條件放在TSQL中nvarchar列的where子句中?

select * from log 
where status >= 
    case isdate(status) 
    when 1 then convert(datetime, '03/11/2011 12:00:01 AM') 
    else '' 
    end 
and status <= 
    case isdate(status) 
    when 1 then convert(datetime, '03/11/2011 4:00:00 PM') 
    else '' 
end 

我需要數據,其中狀態字段的日期時間和日期時間介於日期1和日期2之間。

+1

@Jeff:你編輯它。但SWL是什麼? – User13839404 2011-04-20 18:18:57

+0

它被稱爲錯字User13839404。隨時修復它,而不是評論。 – 2011-04-20 18:25:33

+0

我希望這不是一個需要高效的查詢。它不是「SARGable」(請參閱​​google),最大的問題是列的模糊數據類型。也許在你的上下文中沒問題,但是如果查詢很慢,你需要規範化內容,最好是一個日期時間。 – dkretz 2011-04-20 18:50:39

回答

0
WHERE 
CASE WHEN ISDATE(status) = 1 
    THEN CONVERT(DATETIME,status) 
END BETWEEN '20110311 12:00:01' AND '20110418 16:00:00' 
相關問題