Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Date Logic Clause

Having problems understanding how to get the Where clause to work with this date structure.

Here is the principal logic. I want data only from previous March 1 onward and ending on yesterdays date.

Example #1: So today is Feb 13, 2015 This would mean I need data between (2014-03-01 and 2015-02-12)

Example #2: Say today is March 20, 2015 This This would mean I need data between (2015-03-01 and 2015-03-19)

The where logic might work but it doesn't like to convert '3/1/' + year. But I'm not sure how else to express it. The first clause is fine its the Case section that is broken.

Query

    SELECT [Request Date], [myItem]
    FROM myTable
    WHERE [Request Date] < CONVERT(VARCHAR(10), GETDATE(), 102)
        AND [Request Date] = CASE WHEN 
            CONVERT(VARCHAR(10), GETDATE(), 102) <
            CONVERT(VARCHAR(12), '3/1/' + DATEPART ( year , GETDATE()) , 114)
        THEN [Request Date] > CONVERT(VARCHAR(12), '3/1/' + DATEPART ( year , GETDATE()-365) , 114)
        ELSE [Request Date] > CONVERT(VARCHAR(12), '3/1/' + DATEPART ( year , GETDATE() , 114)
        END

I have also tried

AND [Request Date] = CASE WHEN 
            CONVERT(VARCHAR(10), GETDATE(), 102) <
            '3/1/' + CONVERT(VARCHAR(12), DATEPART ( YYYY , GETDATE()))
        THEN [Request Date] > '3/1/' + CONVERT(VARCHAR(12), DATEPART ( YYYY , GETDATE()-364))
        ELSE [Request Date] > '3/1/' + CONVERT(VARCHAR(12), DATEPART ( YYYY , GETDATE()))
        END
like image 519
Flexpadawan Avatar asked Apr 22 '26 11:04

Flexpadawan


2 Answers

Try this where clause.

WHERE [Request Date] 
         BETWEEN Cast(CONVERT(VARCHAR(4), Year(Getdate())-1)+ '-03-01' AS DATE)
                    AND Getdate() - 1 

Here Cast(CONVERT(VARCHAR(4), Year(Getdate())-1)+ '-03-01' AS DATE) will fetch the first day of march month. With that add -1 year to get the starting point.

Getdate() - 1 will define the ending point

like image 112
Pரதீப் Avatar answered Apr 24 '26 23:04

Pரதீப்


I'd prefer to create datetime variables for the @from - @to range but if this is for a view I guess you have to do it in the where clause.

SELECT [Request Date], [myItem]
    FROM myTable
    WHERE [Request Date] < cast(GETDATE() as date)
        AND [Request Date] >= CASE WHEN 
            GETDATE() < CONVERT(datetime, '3/1/' + cast(Year(GETDATE()) as varchar(4)))
        THEN CONVERT(datetime, '3/1/' + cast(Year(GETDATE()) - 1 as varchar(4)))
        ELSE CONVERT(datetime, '3/1/' + cast(Year(GETDATE()) as varchar(4)))
        END
like image 42
dotjoe Avatar answered Apr 25 '26 01:04

dotjoe