2016-05-13 8 views
1

月間のデータを選択したい。例:@month = 4次に15-03から15-05までのデータ。それはうまく見えるです。SQL Serverのデータ範囲から前後のデータを選択する方法は?

Wood 25-03-1990 
Mary 10-04-1988 
Brown 25-04-1989 
White 10-05-1992 

しかし、私は見つからない@month = 1または@month = 12、データを試してみてください。これはデータであり、コード

NAME BIRTHDAY 
John 10-11-1988 
Green 25-11-1990 
Black 25-12-1989 
Blue 10-12-1991 
Red  10-01-1992 
Candy 25-01-1989 
Food 10-02-1993 
Apple 25-02-1988 
Wood 25-03-1990 
Meat 10-03-1991 
Mary 10-04-1988 
Brown 25-04-1989 
White 10-05-1992 
Yellow 25-05-1993 

そしてSQL-T

日時は、物事が容易になりますがこれはどうだろうと列を持つ
SELECT * FROM ABC 
WHERE 
    CONVERT(DATE,CONVERT(VARCHAR(2),DATEPART(DAY,CONVERT(DATE,BIRTHDAY,105)))+'-'+ 
    CONVERT(VARCHAR(2), DATEPART(MONTH,CONVERT(DATE,BIRTHDAY,105)))+'-'+ 
    CONVERT(VARCHAR(4),YEAR(GETDATE())),105) 
BETWEEN 

    CONVERT(DATE,'15'+'-'+CONVERT(VARCHAR(2), 
    --CASE 
    --  WHEN @month = 1 THEN '12' 
    --  WHEN @month = 12 THEN '11' 
    --  WHEN @month <> 1 AND @month <> 12 THEN @month-1 
    --END 
    @month-1 
    )+'-'+CONVERT(VARCHAR(4),YEAR(GETDATE())),105) 
AND 
    CONVERT(DATE,'15'+'-'+CONVERT(VARCHAR(2), 
    --CASE 
    --  WHEN @month = 1 THEN '2' 
    --  WHEN @month = 12 THEN '1' 
    --  WHEN @month <> 1 AND @month <> 12 THEN @month+1 
    --END 
    @month+1 
    )+'-'+CONVERT(VARCHAR(4),YEAR(GETDATE())),105) 
+0

あなたがコメントアウトしたコードは近いです。しかし、あなたは12月に戻るか、1月に進む時は年を変えません。どのバージョンのSQLを使用していますか?あなたはDATEADDとDATEFROMPARTSを使って何か良いことをすることができますか?あなたが私にあなたが完全な答えを与えることができるSQLのバージョンを教えてください。 – OldBoyCoder

+0

私はSQL Server 2008 Expressを使用しています。 –

+0

また、あなたのテーブルにはどのデータ型がBIRTHDAYですか、それは日付かvarcharですか? – OldBoyCoder

答えて

1

スニペット:

declare @Month int 
SELECT @Month =1 
-- Get start of the period 
declare @baseDate date 
SELECT @baseDate = CONVERT(DATE,'15-'+CONVERT(char(2), @Month)+'-'+convert(varchar(4),YEAR(GETDATE())), 105) 
Print @baseDate 
declare @startDate date 
SELECT @startDate = DATEADD(mm,-1, @baseDate) 
PRINT @startDate 
declare @endDate date 
SELECT @endDate = DATEADD(mm,+1, @baseDate) 
PRINT @endDate 

SELECT *,DATEADD(yy, YEAR(GETDATE())-YEAR(CONVERT(datetime, birthday, 105)),CONVERT(date, birthday, 105)) FROM ABC 
WHERE 
DATEADD(yy, YEAR(@StartDate)-YEAR(CONVERT(datetime, birthday, 105)),CONVERT(date, birthday, 105)) 
BETWEEN 
@StartDate AND @EndDate 
OR 
DATEADD(yy, YEAR(@EndDate)-YEAR(CONVERT(datetime, birthday, 105)),CONVERT(date, birthday, 105)) 
BETWEEN 
@StartDate AND @EndDate 

**に編集を誕生日を現在の年に調整する際のエラーを修正しました。

+0

こんにちは@OldBoyCoder、データはいくつかの行を失った。例の '@month = 1'データは月1と15/2の間の範囲にすぎず、15/12まで失われます。 '@month = 12'のデータは12月15日から15月11日まで失われました。 –

+0

あなたはそうです - 私はそれを逃しました、改訂版を試してください。 – OldBoyCoder

+0

OK、この作業は、ありがとうございます。 –

関連する問題