2014-12-04 71 views
0

我想知道如何在基於當前日期的sql服務器中的列中插入星期幾名稱。我想插入日期直到當天。例如,我想要的東西,按照今天(2014年12月4日)以下列,如何在基於給定日期的sql列中插入星期幾名稱?

day_of_week 
----------- 
Monday 
Tuesday 
Wednesday 
Thursday 

下星期二(2014年12月9日),我想顯示,

day_of_week 
----------- 
Monday 
Tuesday 

讓我知道如何在SQL Server 2012中做到這一點?

任何幫助將不勝感激。

謝謝。

回答

1

它也可以使用遞歸CTE來完成:

;WITH cte AS 
( 
    SELECT DATENAME(weekday,getdate()) AS NameOfDay, 
      DAY(getdate()) AS NumberOfDay, 
      getdate() AS curDate     

    UNION ALL 

    SELECT DATENAME(weekday,DATEADD(day, -1, curDate)) As NameOfDay, 
      DAY(DATEADD(day, -1, curDate)) AS NumberOfDay, 
      DATEADD(day, -1, curDate) AS curDate 
    FROM cte 
    WHERE DAY(GETDATE()) - DAY(DATEADD(day, -1, curDate)) >= 0 
) 
SELECT NameOfDay 
FROM cte 
ORDER BY NumberOfDay 
+0

這也是一個不錯的解決方案!執行計劃表示此查詢成本較高。 – Hatsjoem 2014-12-04 20:37:52

2

像這樣的東西應該工作。

select datename(weekday,n) 
from (VALUES (0),(1),(2),(3),(4),(5),(6)) wdays(n) 
where n < datepart(weekday,'20141209') - 1 

如果你不使用SQL 2008和最多可以做

select datename(weekday,n) 
from (select 0 
union all 
select 1 
union all 
select 2 
union all 
select 3 
union all 
select 4 
union all 
select 5 
union all 
select 6 
) wdays(n) 
where n < datepart(weekday,'20141209') - 1 
+0

尼斯辦法 - 一對夫婦稍微改變:http://sqlfiddle.com/#!3/d41d8/41408 – sgeddes 2014-12-04 20:23:57

+0

它給VALUES上的錯誤 – Arpita 2014-12-04 20:26:19

+0

你確定你在一個SQL Server 2008?我編輯過,所以它也可以在較低版本中使用... – Hatsjoem 2014-12-04 20:29:52

相關問題