附加查询以将日期带到字段, 如果系统时间在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
答案 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)
;