2

エクスポートと分析のためにデータを収集する SQL 選択がたくさんあります。いくつかの変数でデータを収集し、クエリを実行する日付範囲を宣言しました。同じ日付範囲変数を使用する合計 10 の選択があります。私がやりたいのは、変数で宣言できるある種の除外リストを使用して、クエリから特定の日付 (範囲ではなく 1 日) を簡単に除外することです。声明。

DECLARE @date_start DATETIME, @date_end DATETIME
SET @date_start = '2011-10-20 00:00:00'
SET @date_end = '2012-05-18 23:59:59'

SELECT
date, col1, col2, col3
FROM
table1
WHERE
date BETWEEN CONVERT(DATETIME, @date_start, 102) AND CONVERT(DATETIME, @date_end, 102)

SELECT
date, col4, col5, col8
FROM
table2
WHERE
date BETWEEN CONVERT(DATETIME, @date_start, 102) AND CONVERT(DATETIME, @date_end, 102)

SELECT
date, col3, col5, col6, col7, col8
FROM
table3
WHERE
date BETWEEN CONVERT(DATETIME, @date_start, 102) AND CONVERT(DATETIME, @date_end, 102)
4

3 に答える 3

0

where 条件で IN を使用して、選択した日付を指定できます。また、日付部分のみを検討している場合は、yyyy/MM/dd 形式を提供する Convert(varchar,datecolumn,111) を使用することをお勧めします。時間の部分 23:59:59 を指定する必要はありません。

于 2012-05-24T09:05:43.080 に答える
0

探している日付でテーブル変数を作成し、それをクエリで使用します。

日付範囲変数と、探していない日付を保持する別のテーブルを使用して、そのテーブルを作成できます。

このようなもの:

declare @date_start datetime
declare @date_end datetime

-- The date range you want. Don't add time part.
set @date_start = '20010102'
set @date_end = '20010107'

declare @NotTheDatesYouAreLookingFor as table
(
  date datetime
)

insert into @NotTheDatesYouAreLookingFor values
('20010103'),
('20010105')

declare @TheDatesYouAreLookingFor as table
(
  date datetime primary key
)

;with C(date) as
(
  select @date_start
  union all
  select date + 1
  from C
  where date < @date_end
)
insert into @TheDatesYouAreLookingFor(date)
select date
from C
  where date not in (select date 
                     from @NotTheDatesYouAreLookingFor)

そして、クエリは@TheDatesYouAreLookingForこのようなテーブルを使用する必要があります。

select T1.date, T1.col1, T1.col2, T1.col3
from table1 as T1
  inner join @TheDatesYouAreLookingFor as TD
    on T1.date >= TD.date and T1.date < dateadd(day, 1, TD.date)
于 2012-05-24T09:09:36.807 に答える
0

で使用:

これをクエリに追加します: AND date not in (date1,date2...)

于 2012-05-24T09:03:08.670 に答える