6

私はSQLサーバー2014を使用しています。次のクエリを使用して、同じテーブル内の2つの日付から選択します。データ型はnvarchar次のクエリを実行しまし('30/03/2015','30/04/2015','30/04/2015')('29/02/2015','30/03/2015','31/04/2015','30/04/2015','30/04/2015')

select RegisteredDate
from Student
where Student.RegisteredDate between convert(nvarchar, '30/01/2014', 103)
    and convert(nvarchar, '30/04/2015', 103)
4

3 に答える 3

3

文字列を比較している別の方法でキャストします。

select RegisteredDate from Student
where convert(date, Student.RegisteredDate, 103) between '20140130' and '20150430'

実際には、文字列として保存された日付は次のように並べられます。

'29/02/2015',
'30/03/2015',
'30/04/2015',
'30/04/2015',
'31/04/2015'

フィルタ値をどこに追加するか想像してみてください。

 '29/02/2015',

 '30/01/2014' --start date

/-------------\
|'30/03/2015',|
|'30/04/2015',|
|'30/04/2015',|
\-------------/

 '30/04/2015' --end date

 '31/04/2015'

したがってbetween、これらの 3 つの行が返されます。また、あなたのデータには29/02/2015. 22015月は で終了し28ます (テーブルには既に誤ったデータがあります)。タイプを正しく選択した場合、そのような値を挿入することはできません。したがって、結論は次のとおりです。

データに適切なデータ型を使用してください!

于 2015-04-30T15:35:16.943 に答える
2

他の回答とコメントを読んだので、まず「RegisteredDate」のデータ型を「nvarchar」から「date」に変更することをお勧めします。次に、この標準の 'yyyy-MM-dd' 以下のコードを使用する必要があります

select RegisteredDate 
from Student
where Student.RegisteredDate between '2014-01-30' and '2015-04-30'

あなたは変換を必要としません。これが私が自分で行う方法です

于 2015-05-06T14:25:20.530 に答える