2017-08-15 6 views
1

-T-SQLのSQL日付時刻変数の比較が機能しません。どうして?

DECLARE @MyDateFormatString NVARCHAR(MAX) = '2017-08-15 7:12:19 PM' 
PRINT @MyDateFormatString 
DECLARE @MyDateFormat DATETIME = '2017-08-15 7:12:19 PM' 
PRINT @MyDateFormat 
IF (CONVERT(DATETIME, @MyDateFormatString) = CONVERT(DATETIME, @MyDateFormat)) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

ワークス -

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

機能しない - WHYを!!!あなたの2番目のクエリに

+0

- これは IF(CONVERT(DATETIME、@MyDateFormatString)= CONVERT(DATETIMEを、機能しませんCONVERT(NVARCHAR(MAX)、@ MyDateFormat)))BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 上記の作業を行うための何らかの方法が見つかった場合には、どうもありがとうございます –

+0

なぜそれが動作すると思いますか? 7:12:19 <> 7:12 –

+0

xDちょうどSQLが無駄に私の秒を捨てるとは思わない –

答えて

1

変更

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

IF (CONVERT(DATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12:19 PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

または

IF (CONVERT(DATETIME, '2017-08-15 7:12 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 

あなたは秒を比較していません。あなたの最初のクエリでは、あなたは

2017年8月15日19:12

2017年8月15日19:12正しい

に比較します。二一

あなたは19:12

2017 8月15日

2017年8月15日午前7時12分19秒PM

を比較します

7:12:19は7:12と同じではありません。だからどちらのフォーマットを変更してもそれは正しいでしょう。

EDIT:

あなたのコメントに対処するには、秒なしDATETIMEをしたい場合はSMALLDATETIMEを使用し、それはあなたのシナリオで動作します。最初の2番目のクエリを使用してこの例を見てください。しかし、注意してください、それはHHに時刻の形式を削減:ミリメートル:00ので、これを警戒する:

IF (CONVERT(SMALLDATETIME, '2017-08-15 7:12:19 PM') = CONVERT(DATETIME, 'Aug 15 2017 7:12PM')) BEGIN PRINT 'YES!' END ELSE BEGIN PRINT 'NO' END 
+0

ありがとう。 DECLARE DateTimeAutoConverted DATETIME = CONVERT(DATETIME、 '2017年8月15日午前7時12分19秒PM') DECLARE DateTimeAutoConvertedString NVARCHAR(MAX)= CONVERT(NVARCHAR(MAX)、DateTimeAutoConverted)を :ここで私はそれを発見しなかった理由ですPRINT DateTimeAutoConvertedString SQLは、私がそれを与える文字列を自動変換するときに秒を落とすのに十分親切です。その周りには何か? –

+0

代わりにDATETIME2を試してください –

+0

@ Shiasu-samaあなたのために私の編集を見て、あなたに質問があるかどうか教えてください。 :-) – Simon

関連する問題