2016-10-10 7 views
0

where句のgetdate()と比較するために、varcharに含まれる日付を取得しようとしています。 varchar型の変数は、常に次のようになります。現在のSQL Serverの部分文字列where 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を実行しています。

はTRY_PARSEを使用しての

destination-dataの提案が働いていたアカウントにコメントを取るために編集されました!みんな、ありがとう。

+1

いくつかのサンプルデータを教えてください。 – GuidoG

+0

コメントありがとうございます。 datediff(日、CAST(datetimeとしての部分文字列(CA_NOTE、12,8))、getdate())> 90 は、前と同じエラーメッセージを返します。 – Adam

+0

...あなたは今、別の質問があることを意味します。この新しいバージョンは* ok *ですので、@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

良いキャッチ。このクエリの複数の問題! –

関連する問題