0

これはおそらくあなたにとって簡単です(しかし私は初心者です)。

Table_1次の列を持つ名前のテーブルがあります。

[id]
[command]
[verify_date]
[data_interval_start]
[data_interval_end]

テーブル内のデータは次のようになります。

id  command     verify_date  data_interval_start   data_interval_end
--------------------------------------------------------------------
1   123456      2013-02-01   2013-05-01            2013-05-06 
2   234513      2012-05-02   2013-01-01            2013-03-01 
3   221342      2013-05-04   2011-01-01            2011-01-02 

がとverify_dateのそれぞれの間にあるかどうかを確認したい。したがって、最初の値を取り、 と の間のすべてのレコード間でチェックします。data_interval_startdata_interval_endverify_datedata_interval_startdata_interval_end

私はこのクエリを試しましたが、結果はありません:

SELECT command from Table_1 
WHERE verify_date IN (data_interval_start, data_interval_end)


SELECT command from Table_1 
WHERE verify_date between data_interval_start AND data_interval_end 


SELECT command from Table_1 
WHERE verify_date = data_interval_start OR verify_date = data_interval_end

どんな助けでも大歓迎です:)。

ありがとう

4

3 に答える 3

1

日付が であると仮定すると、以下DATE type fieldsのように a を使用できCASEます。

select id, command, case when verify_date between  
                              data_interval_start and  data_interval_end 
                         then 'Yes'
                         else 'No' 
                    end isBetween
from table1

日付が文字列型フィールドの場合は、それらをISO format( yyyymmdd) に取得し、以下のように比較するために DATE に変換します。

select id, command, case when convert(date,replace(verify_date,'-','')) between  
                              convert(date,replace(data_interval_start,'-','')) 
                              and convert(date,replace(data_interval_end,'-',''))  
                         then 'Yes'
                         else 'No' 
                    end isBetween
from table1

編集:特定の日付を比較する必要がある場合は、以下のように行うことができます。( between は包括的であることに注意してください。したがって、data_interval_startandを除外する必要がある場合は、 and演算子data_interval_endを使用してください)<>

--say this is the date you need to compare your records with
declare @verify_date date = '20130201'

select id, command
from table1
where @verify_date between convert(date, data_interval_start) 
                              and convert(date, data_interval_end) 

すべてに対して行うには、以下varify_dateのようなものを使用できcross joinます。

Sql-フィドル-デモ

select t1.id, t1.command, t2.verify_date
from table1 t1 cross join table1 t2
where t2.verify_date between convert(date, t1.data_interval_start) 
                              and convert(date, t1.data_interval_end)

| ID | COMMAND | VERIFY_DATE |
------------------------------
|  2 |  234513 |  2013-02-01 |
|  1 |  123456 |  2013-05-04 |
于 2013-03-26T11:16:29.973 に答える
0

あなたの2番目のクエリはあなたのために働く

SELECT command from Table_1 
WHERE verify_date between data_interval_start AND data_interval_end 

id  command     verify_date  data_interval_start   data_interval_end
--------------------------------------------------------------------
1   123456      2013-02-01   2013-05-01            2013-05-06 
2   234513      2012-05-02   2012-01-01            2013-03-01 
3   221342      2013-05-04   2011-01-01            2011-01-02 

上記のデータで確認してください

于 2013-03-26T11:32:02.317 に答える
0

私はあなたが2つの文字列を比較していると思いますDATE

そのように

     select command from Table_1 where convert(CHAR(10),verify_date,111) 
     between convert(CHAR(10),data_interval_start,111)  AND convert(CHAR(10),data_interval_end,111)  

ここで日付を変換する方法

于 2013-03-26T11:00:47.263 に答える