按日显示日期,并根据条件设置默认日期

时间:2015-11-30 11:50:34

标签: sql sql-server tsql date

附加查询以将日期带到字段, 如果系统时间在01:00 pm之前那么它应该带来今天日期+ 1否则如果系统日期在01:00 pm之后或者等于它应该带来今天日期+2 此外,用户可以看到查询结果,该查询结果将显示日期范围以及日期名称,如果上述情况不是用户正在查找的内容,则可以手动选择其中一个。

查询是可用的并且工作正常但是分开, 一个查询带来日期范围,一个查询根据条件设置日期,我需要使它们成为一个查询,带来日期范围并根据条件设置默认日期; 这是查询: 注意:Q No 2,我试图将两个查询作为一个查询,但它没有带来正确的结果,无论系统时间是什么,它都会保持今天的日期+1。

1)

  If DATEPART(Hour,Getdate())<12
    SELECT GetDate()+1

    If DATEPART(Hour,Getdate())>=12
    SELECT GetDate()+2 

2)

If DATEPART(Hour,Getdate())<12
    DECLARE @Date1 DATE, @Date2 DATE
    SET @Date1 = GetDate()+0
    SET @Date2 = GetDate()+365

SELECT DATEADD(DAY,number+1,@Date1) [Date], DateName(Weekday,DATEADD(DAY,number+1,@Date1)) as dayname
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date1) < @Date2

If DATEPART(Hour,Getdate())>=12
    DECLARE @Date3 DATE, @Date4 DATE
    SET @Date3 = GetDate()+2
    SET @Date4 = GetDate()+365

SELECT DATEADD(DAY,number+1,@Date3) [Date], DateName(Weekday,DATEADD(DAY,number+1,@Date3)) as dayname
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date3) < @Date4

1 个答案:

答案 0 :(得分:0)

我使用了CTE来计算开始日期。 CTE使用CASE语句来判断它是在12之前还是之后运行。

WITH Base AS
    (
        /* Returns the start date based on the current time.
         * Before midday the start date is today.
         * After midday it is the day after tomorrow.
         */
        SELECT
            CASE 
                -- Use current time to calculate start date.
                WHEN DATEPART(HOUR, GETDATE()) < 12 THEN DATEADD(DAY, 0, GETDATE())
                ELSE DATEADD(DAY, 2, GETDATE())
            END AS StartDate
    )
SELECT
    DATEADD(DAY, sv.Number + 1, b.StartDate)                    AS [Date],
    DATENAME(WEEKDAY, DATEADD(DAY, sv.Number + 1, b.StartDate))    AS [DateName]
FROM
    master..spt_values AS sv
        CROSS JOIN Base AS b
WHERE 
    sv.[type] = 'P'
    AND DATEADD(DAY, Number + 1, b.StartDate) < DATEADD(YEAR, 1, b.StartDate)
;