2016-10-10 100 views
0

我試圖採取包含在varchar中的日期來比較它與where子句中的getdate()。該VARCHAR變量總是看起來是這樣的:SQL Server子字符串在哪裏caluse

最近看到:MM/DD/YY

一些樣本數據:

Last Seen: 07/12/16 
Last Seen: 08/01/16 
Last Seen: 07/22/16 
NULL 
NULL 
NULL 
NULL 
Last Seen: 07/28/16 

轉換爲varchar到日期時間,並找到天差作爲下面的作品:

datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) as dayspassed 

問題是,當我堅持這種編碼在where子句將日期與getdate()進行比較我不斷收到相同的錯誤。

where datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) > 90 

消息241,級別16,狀態1,行3轉換轉換從字符串 日期和/或時間時失敗。

我正在運行SQL Server 2014 Management Studio。

編輯採取評論考慮

destination-data的使用TRY_PARSE的建議的工作!感謝大家。

+1

你能給我們一些樣本數據嗎? – GuidoG

+0

謝謝你的評論。 datediff(day,CAST(substring(CA_NOTE,12,8)as datetime),getdate())> 90 給出與以前相同的錯誤消息。 – Adam

+0

......這意味着你現在有一個不同的問題。這個新版本*看起來很好,所以我會翻回@GuidoG和他的請求,以顯示一些我們可以使用的示例數據。 –

回答

1

SQL不知道該怎麼做getdate()-90 - 減去90天? 90分鐘? 90年?

您需要使用功能,例如dateadd,例如,

where convert(varchar(30),cast(substring(CA_NOTE, 12, 8) as datetime),102) < dateadd(dd, -90, getdate()) 
+0

@bassrek已解決您的問題。我的問題解決了你的下一個問題。 –

1

問題是,你仍然將它轉換爲VARCHAR。試試這個:

CAST(substring(CA_NOTE, 12, 8) as datetime) 
+0

好的。這個查詢有多個問題! –