日付やその他の情報を格納するテーブルがあります。
テーブルに保存されていない日付のレコードを表示したい。
01/01/2012[dd/mm/yyyy]
例: 、03/01/2012
、 の 日付があり06/01/2012
ます。
日付の出力を表示したい02/01/2012
, 04/05/2012
,05/01/2012.
SQLServer2008でこれを照会してください
日付やその他の情報を格納するテーブルがあります。
テーブルに保存されていない日付のレコードを表示したい。
01/01/2012[dd/mm/yyyy]
例: 、03/01/2012
、 の 日付があり06/01/2012
ます。
日付の出力を表示したい02/01/2012
, 04/05/2012
,05/01/2012.
SQLServer2008でこれを照会してください
機能を使用できますDATEADD
。たとえば、現在の日付に 1 日を追加するには、次のようにします。
SELECT DATEADD(dd, 1, GETDATE())
詳細については、MSDNを参照してください。
;WITH MYCTE AS
(
SELECT CAST('1900-01-01' AS DATETIME) DateValue
UNION ALL
SELECT DateValue + 1
FROM MYCTE
WHERE DateValue + 1 < '3550-12-31'
)
SELECT DateValue, B.SomeColumn
FROM MYCTE A
LEFT JOIN MyTable B ON A.DateValue = B.DateValue
OPTION (MAXRECURSION 0)
ここから日付範囲 cte を取得しました(250000 行のテーブルを生成するのに 4 秒かかります)
このコードは、表にない 2011 年のすべての日付を表示します。
create table #dates (d datetime);
declare @start_period datetime;
set @start_period='01.01.2011';
declare @end_period datetime;
set @end_period='01.01.2012';
declare @d datetime;
set @d=@start_period
while(@d<@end_period)
begin
insert into #dates (d) values (@d)
SET @d=@d+1
end
select d from #dates where d not in (select <date> from <your_table>)