복붙노트

[SQL] SQL 서버 2005/2008에서 요일을 가져 오기

SQL

SQL 서버 2005/2008에서 요일을 가져 오기

내가 날짜 2009년 1월 1일이있는 경우, 나는 그것이 예를 들어, 무엇 하루를 찾으려면 월요일, 화요일, 등 ...

거기에 내장 된 SQL 서버 2005/2008에서 이것에 대한 기능? 또는 내가 보조 테이블을 사용해야합니까?

해결법

  1. ==============================

    1.사용 DATENAME 또는 DATEPART :

    사용 DATENAME 또는 DATEPART :

    SELECT DATENAME(dw,GETDATE()) -- Friday
    SELECT DATEPART(dw,GETDATE()) -- 6
    
  2. ==============================

    2.SQLMenace의 대답이 받아 들여졌다하더라도, 당신이 알아야 할 한 가지 중요한 SET 옵션이 있습니다

    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
    
  3. ==============================

    3.

    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
    
  4. ==============================

    4.주어진 날짜에 대한 요일의 결정 값을 얻으려면 당신은 DATEPART의 조합 ()와 @@ DATEFIRST를 사용할 수 있습니다. 서버의 설정에 그렇지 않으면 의존.

    주어진 날짜에 대한 요일의 결정 값을 얻으려면 당신은 DATEPART의 조합 ()와 @@ DATEFIRST를 사용할 수 있습니다. 서버의 설정에 그렇지 않으면 의존.

    더 나은 솔루션은 다음 사이트를 체크 아웃 : MS SQL : 요일

    요일은 그럼 당신은 올바른 요일 이름을 반환하는 간단한 사례 문을 사용할 수 있습니다, 하나는 월요일, 0은 일요일 범위 0-6에 등을 될 것입니다.

  5. ==============================

    5.유럽:

    유럽:

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

    6.SQL 서버 2012 및 이후 당신은 FORMAT 기능을 사용할 수 있습니다

    SQL 서버 2012 및 이후 당신은 FORMAT 기능을 사용할 수 있습니다

    SELECT FORMAT(GETDATE(), 'dddd')
    
  7. ==============================

    7.이 내 코드의 작업 복사본은 SQL 날짜에서 하루 이름을 검색하는 방법을 확인하다

    이 내 코드의 작업 복사본은 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
    
  8. ==============================

    8.당신이 @@ DATEFIRST 또는 사용 DATEPART (평일, DateColumn을)에 의존하지 않으려면, 단지 주 자신의 일을 계산합니다.

    당신이 @@ DATEFIRST 또는 사용 DATEPART (평일, DateColumn을)에 의존하지 않으려면, 단지 주 자신의 일을 계산합니다.

    월요일 기반 주 (유럽)의 경우 간단한이다 :

    SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay
    

    일요일 기반 주 (미국) 사용을 위해 :

    SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay
    

    이 반환 이제까지 1753 년 1 월 1 일 각각 7 일 이후 평일 번호 (1 ~ 7).

  9. ==============================

    9.당신은 DATEPART (DW, GETDATE ()를) 사용하지만 결과는 (일요일에서 유럽 기본값 7) 주 설정의 첫 번째 날입니다 SQL 서버 설정 @@ DATEFIRST 값에 의존하는 것으로 인식 할 수있다.

    당신은 DATEPART (DW, GETDATE ()를) 사용하지만 결과는 (일요일에서 유럽 기본값 7) 주 설정의 첫 번째 날입니다 SQL 서버 설정 @@ DATEFIRST 값에 의존하는 것으로 인식 할 수있다.

    다른 값으로 일주일의 첫날을 변경하려는 경우, 당신은 SET DATEFIRST를 사용할 수 있지만이 원하지 않는 쿼리 세션에서 사방에 영향을 줄 수 있습니다.

    다른 방법은 명시 적으로 매개 변수와 한주의에 @@ DATEFIRST 설정 따라 같은 주 값의 첫 날을 지정하는 것입니다. 당신은 그것을 필요로 할 때 것을 달성하기 위해 다음과 같은 공식을 사용할 수 있습니다 :

    (DATEPART(dw, GETDATE()) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1
    

    @WeekStartDay (1 ~ 7하는 수단에서 월요일부터 일요일까지) 당신이 당신의 시스템에 대해 원하는 일주일의 첫날입니다.

    우리가 쉽게 재사용 할 수 있도록 나는 아래 기능으로 포장했다 :

    CREATE FUNCTION [dbo].[GetDayInWeek](@InputDateTime DATETIME, @WeekStartDay INT)
    RETURNS INT
    AS
    BEGIN
        --Note: @WeekStartDay is number from [1 - 7] which is from Monday to Sunday
        RETURN (DATEPART(dw, @InputDateTime) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1 
    END
    

    사용 예제 : GetDayInWeek ( '2019년 2월 4일 0시 0분 0초', 1)

    그것은 (SQL 서버 DATEFIRST 설정에 있지만 독립적 인) 다음에 해당합니다 :

    SET DATEFIRST 1
    DATEPART(dw, '2019-02-04 00:00:00')
    
  10. ==============================

    10.이 버전이 유용 할 수있다.

    이 버전이 유용 할 수있다.

    -- Test DATA
    select @@datefirst
    create table #test (datum datetime)
    insert #test values ('2013-01-01')
    insert #test values ('2013-01-02')
    insert #test values ('2013-01-03')
    insert #test values ('2013-01-04')
    insert #test values ('2013-01-05')
    insert #test values ('2013-01-06')
    insert #test values ('2013-01-07')
    insert #test values ('2013-01-08')
    -- Test DATA
    
    select  Substring('Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat',
            (DATEPART(WEEKDAY,datum)+@@datefirst-1)*4+1,3),Datum
            from #test 
    
  11. from https://stackoverflow.com/questions/1110998/get-day-of-week-in-sql-server-2005-2008 by cc-by-sa and MIT license