2017-05-01 6 views
2

クエリ'2017-03-04 10:07:03.490'のようなSQL Serverの日付時刻形式を '2-11-2016'のように日付形式に変換する方法

select * 
from dbo.OH_Case 
where dbo.OH_Case.CreatedDate between Convert(varchar(30),'24/04/2017', 102) 
            and Convert(varchar(30),'01/05/2017', 102) 

が、それは、このエラーがスローされます。

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

私のアプリケーションは、形式とSQL Serverの日付情報が中に保存されている「'01/05/2017' 年にデータを渡す2017年3月4日10:07:03.490 '形式である。比較を可能にする同じフォーマットでこれらの両方を作るにはどうすればよいですか?

+1

'CreatedDate'はdatetimeデータ型である場合、あなたは、他の日時のではないvarchar型のそれを比較する必要があります。また、[日付の比較時には注意してください](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx )。 – HoneyBadger

+1

外観を忘れてしまった。 oh_Case.CreatedDateのデータ型は? –

+0

これは、https://technet.microsoft.com/en-us/library/ms187928(v=sql.105).aspx – Hexxx

答えて

1

まず、あなたはvarcharにリテラル文字列を変換しています。代わりにdatetimeに変換してください。

第2に、24/04/2017を渡していますが、date format 102yyyy.mm.ddです。 dd/mm/yyyyの日付フォーマット103を試してみてください。

convert(datetime, '24/04/2017', 103) 
+0

ありがとう、これは私のために働いた。 –

+0

SET Language Germanのようなステートメントを使用してください(また、日付の値を正しい方法で解釈する言語を選択することもできます)。その後、SQLはあなたの日付の値を解釈する方法を知り、月と日を混乱させることはありません。 – Tom

1

ここでdbo.OH_Case.CreatedDateはデータ型Datetimeであり、フィルタのためにDatetime形式で値を変換する必要があります。 Datetime形式の列を変換し、すべての形式が同じになります。あなたの場合は、VARCHARの代わりにDatetimeで値を変換しても問題ありません。

select * from 
dbo.OH_Case 
where dbo.OH_Case.CreatedDate between cast('24/04/2017' as datetime) and 
cast('01/05/2017' as datetime) 

更新:

シッダールタ、私はあなたの日付値をチェックし、その問題は日付 "24/04/2017" である考え出しました。この形式は "MM/dd/yyyy"です。 24は有効でない月として渡されます。したがって例外をスローしています。私はそのような例外を処理するために結果 を更新しました。

select * from 
dbo.OH_Case 
where dbo.OH_Case.CreatedDate between convert(datetime, '24/04/2017', 103) and 
convert(datetime, '01/05/2017', 103) 
+0

残念ながら、それは質問 –

+0

に記載されているのと同じエラーをスローする列dbo.OH_Case.CreatedDateのデータ型は何ですか? –

関連する問題