[sql] SQL Server 2005/2008에서 요일 가져 오기

날짜가 2009 년 1 월 1 일인 경우 월요일, 화요일 등의 요일을 확인하고 싶습니다.

SQL Server 2005/2008에이 기능이 내장되어 있습니까? 아니면 보조 테이블을 사용해야합니까?



답변

사용 DATENAME또는 DATEPART:

SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6


답변

SQLMenace의 답변이 수락되었지만 SET알고 있어야 할 중요한 옵션이 있습니다.

날짜 설정

DATENAME 은 첫 번째 요일이 아래 그림과 같이 변경된 경우 정확한 날짜 이름 을 반환 하지만 동일한 DATEPART 값 은 반환 하지 않습니다 .

declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select  [@DefaultDateFirst] = @DefaultDateFirst

set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7

--; Set the first day of week to * TUESDAY * 
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It's not 7!
set datefirst @DefaultDateFirst


답변

SELECT  CASE DATEPART(WEEKDAY,GETDATE())
    WHEN 1 THEN 'SUNDAY'
    WHEN 2 THEN 'MONDAY'
    WHEN 3 THEN 'TUESDAY'
    WHEN 4 THEN 'WEDNESDAY'
    WHEN 5 THEN 'THURSDAY'
    WHEN 6 THEN 'FRIDAY'
    WHEN 7 THEN 'SATURDAY'
END


답변

특정 날짜의 요일에 대한 결정적 값을 얻으려면 DATEPART ()@@ datefirst 조합을 사용할 수 있습니다 . 그렇지 않으면 서버의 설정에 따라 다릅니다.

더 나은 솔루션을 얻으려면 다음 사이트를 확인하십시오.
MS SQL : 요일

요일은 0-6 범위에 있으며, 여기서 0은 일요일, 1은 월요일 등입니다. 그런 다음 간단한 case 문을 사용하여 정확한 요일 이름을 반환 할 수 있습니다.


답변

유럽:

declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);


답변

SQL Server 2012 이상에서는이 FORMAT기능을 사용할 수 있습니다

SELECT FORMAT(GETDATE(), 'dddd')


답변

이것은 내 코드의 작업 복사본입니다 .SQL에서 날짜에서 날짜 이름을 검색하는 방법

CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData]
@FromDate date,
@ToDate date

As
Begin
select p.ProjectName + ' ( ' + st.Time +' '+'-'+' '+et.Time +' )' as ProjectDeatils,
datename(dw,pts.StartDate) as 'Day'
from
ProjectTimeSheet pts
join Projects p on pts.ProjectID=p.ID
join Timing st on pts.StartTimingId=st.Id
join Timing et on pts.EndTimingId=et.Id
where pts.StartDate >= @FromDate
and pts.StartDate <= @ToDate
END