0

VARCHAR(50) から DATE に変換しようとしています。日付のみ。しかし、結果は得られませんでしたが、これは私が使用したステートメントです:

SELECT COUNT(F0)
FROM [OriginalData]
WHERE F1 between Convert(VARCHAR(11),'25/12/1988',103) and 
          convert(VARCHAR(11),'16/01/2013',103) AND F0 = 120002

結果を表示する唯一の方法は、日の文字列が 01 の場合です。例えば:

1988 年 1 月 1 日および 2013 年 1 月 1 日

文字列から日付に変換して比較する方法についてアドバイスをお願いします。

4

5 に答える 5

2

が であると仮定するF1varchar(50)、文字列比較を行っています。

適切な ISO 日付を使用...

...
WHERE CONVERT(date, F1, 112) -- change this to match F1 format
         BETWEEN CONVERT(date,'19881225',112) and 
                 CONVERT(date,'20130116',112)
       AND F0 = 120002

CONVERTon が必要なため、これはインデックス作成の観点からは効率的ではないことに注意してくださいF1

于 2013-01-16T09:51:18.303 に答える
1

このように変換する必要があります

SELECT convert(datetime, '23/07/2009', 103)

つまり、クエリは

SELECT COUNT(F0)
FROM [OriginalData]
WHERE F1 between Convert(datetime,'25/12/1988',103) and 
          convert(datetime,'16/01/2013',103) AND F0 = 120002

変換中にデータ型をVARCHAR(11)使用 する代わりにDateTime

:仮定F1はのタイプですdatetime


varchar の F1 データ型の場合

SELECT COUNT(F0)
FROM [OriginalData]
WHERE Convert(datetime,F1,103) between Convert(datetime,'25/12/1988',103) and 
          convert(datetime,'16/01/2013',103) AND F0 = 120002

上記のクエリのように F1 も変換します

于 2013-01-16T09:49:05.887 に答える
0

文字列から日付に変換するには、次のようにすると思います。

CONVERT (datetime, '16.01.2013', 103)

そしてあなたはVarcharそこで使っています。

于 2013-01-16T09:52:14.193 に答える
0

次のクエリを使用できます。

declare @t varchar(100) = '26/12/1988'

select case
        when convert(date,@t,103) between Convert(date,'25/12/1988',103) and convert(date,'16/01/2013',103) 
                then @t
        else
            'date is not in the specified range'    
        end
于 2013-01-16T11:17:39.657 に答える
0

これを試して

CONVERT(DATETIME, '25/12/1988', 101)
于 2013-01-16T09:49:19.473 に答える