SQL Serverが変換方法を推測する必要がないように、明確な日時形式を使用します。
where [CreatedDate] >= '2010-09-16T00:32:41.960'
地域の設定によっては、(ではなくT
)スペースセパレータを使用してフォームをと解釈する場合があるのは残念ですYYYY-DD-MM hh:mm:ss
。これはあなたの例で範囲外の月を与えます(そして日=月の場合を除いて、月の初めの日付の間違った結果)
私は通常、安全なフォーマットを次のようにリストします。
YYYYMMDD
YYYY-MM-DD'T'hh:mm:ss
YYYY-MM-DD'T'hh:mm:ss.mil
datetime2
またはに変換すると安全になったフォーマットは他にもいくつかありますがdate
、覚えていません。通常は上記で十分です。
もう1つの方法は、set dateformat
次の日付リテラルを使用する前にステートメントを実行することです。
set dateformat mdy
select MONTH('2010-09-16 00:32:41.960')
結果として与え9
ますが、あなたが経験していることは次のように再現することができます:
set dateformat dmy
select MONTH('2010-09-16 00:32:41.960')