복붙노트

[SQL] 사용자 정의 날짜 / 시간은 SQL Server의 서식

SQL

사용자 정의 날짜 / 시간은 SQL Server의 서식

나는 테이블에서 열을 선택하고 ResultSet의 2 여분의 열을 추가하는 저장 프로 시저를 작성하려합니다. 이 2 여분의 열은 날짜 시간 필드 테이블에 필드에 변환의 결과이다.

날짜 시간 형식 필드는 다음과 같은 형식 ': MM : SS.S YYYY-MM-DD HH'을 가지고

다음 형식이어야합니다 2 개 추가 필드 :

예 : 필드의 데이터가 "19 : 13 : 12.0 2008-10-12 '이었다면, 추출한 필드를 포함한다 :

나는 CONVERT 문자열 형식을 사용하여 시도했지만 형식의 아무도 내가 싶어 출력과 일치하지 않습니다. 나는 CONVERT를 통해 필드 데이터를 추출하고 교체 사용의 라인을 따라 생각하고,하지만 난 더 확신하지 않기 때문에 나는 확실히, 여기에 몇 가지 도움이 필요합니다.

사람이 잘 저장 프로 시저에 정통한 수 여기에 나를 도와? 감사!

해결법

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

    1.DT는 다음 날짜 컬럼 인 경우

    DT는 다음 날짜 컬럼 인 경우

    1의 경우 :

    SUBSTRING(CONVERT(varchar, dt, 13), 1, 2)
        + UPPER(SUBSTRING(CONVERT(varchar, dt, 13), 4, 3))
    

    이 경우 :

    SUBSTRING(CONVERT(varchar, dt, 100), 13, 2)
        + SUBSTRING(CONVERT(varchar, dt, 100), 16, 3)
    
  2. ==============================

    2.사용 DATENAME과 기능이 아닌 저장된 프로 시저에서 논리를 포장

    사용 DATENAME과 기능이 아닌 저장된 프로 시저에서 논리를 포장

    declare @myTime as DateTime
    
    set @myTime = GETDATE()
    
    select @myTime
    
    select DATENAME(day, @myTime) + SUBSTRING(UPPER(DATENAME(month, @myTime)), 0,4)
    

    반환 "14OCT"

    날짜로 작업 할 때 가능하면 모든 문자를 사용하지 않으려 고 / 문자열 작업을 기반으로. 그들은 (부동 소수점) 수치이며, 성능은 그 데이터 형식 변환에서 겪게됩니다.

    나는 지난 몇 년 동안 컴파일이 편리한 변환을 파 ...

    /* Common date functions */
    --//This contains common date functions for MSSQL server
    
    /*Getting Parts of a DateTime*/
        --//gets the date only, 20x faster than using Convert/Cast to varchar
        --//this has been especially useful for JOINS
        SELECT (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))
    
        --//gets the time only (date portion is '1900-01-01' and is considered the "0 time" of dates in MSSQL, even with the datatype min value of 01/01/1753. 
        SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))
    
    
    /*Relative Dates*/
    --//These are all functions that will calculate a date relative to the current date and time
        /*Current Day*/
        --//now
        SELECT (GETDATE())
    
        --//midnight of today
        SELECT (DATEADD(ms,-4,(DATEADD(dd,DATEDIFF(dd,0,GETDATE()) + 1,0))))
    
        --//Current Hour
        SELECT DATEADD(hh,DATEPART(hh,GETDATE()),CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DateTime))
    
        --//Current Half-Hour - if its 9:36, this will show 9:30
        SELECT DATEADD(mi,((DATEDIFF(mi,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)), GETDATE())) / 30) * 30,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)))
    
        /*Yearly*/
        --//first datetime of the current year
        SELECT (DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
    
        --//last datetime of the current year
        SELECT (DATEADD(ms,-4,(DATEADD(yy,DATEDIFF(yy,0,GETDATE()) + 1,0))))
    
        /*Monthly*/
        --//first datetime of current month
        SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))
    
        --//last datetime of the current month
        SELECT (DATEADD(ms,-4,DATEADD(mm,1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))))
    
        --//first datetime of the previous month
        SELECT (DATEADD(mm,DATEDIFF(mm,0,GETDATE()) -1,0))
    
        --//last datetime of the previous month
        SELECT (DATEADD(ms, -4,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)))
    
        /*Weekly*/
        --//previous monday at 12AM
        SELECT (DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0))
    
        --//previous friday at 11:59:59 PM
        SELECT (DATEADD(ms,-4,DATEADD(dd,5,DATEADD(wk,DATEDIFF(wk,0,GETDATE()) -1 ,0))))
    
        /*Quarterly*/
        --//first datetime of current quarter
        SELECT (DATEADD(qq,DATEDIFF(qq,0,GETDATE()),0))
    
        --//last datetime of current quarter
        SELECT (DATEADD(ms,-4,DATEADD(qq,DATEDIFF(qq,0,GETDATE()) + 1,0)))
    
  3. ==============================

    3.당신은 그것을하기 위해 SQL 서버에서 다음 명령을 사용할 수 있습니다 :

    당신은 그것을하기 위해 SQL 서버에서 다음 명령을 사용할 수 있습니다 :

    select FORMAT(getdate(), N'yyyy-MM-ddThh:mm:ss')
    
  4. ==============================

    4.특히 귀하의 질문에 대답하지,하지만 애플리케이션의 프리젠 테이션 계층에서 처리해야하는 일이 없습니다. 그것은 당신이 설명하는 방법을 수행하면 별도의 데이터베이스 끝에 처리뿐만 아니라 더 풍부한 날짜, 쉽게 응용 프로그램 측에서 계산 될 수있는 무언가를, (데이터베이스 응용 프로그램이 아닌 다른 시스템에있는 가정) 별도의 네트워크 트래픽을 추가하는 등을 생성 라이브러리를 처리 할뿐만 아니라, 특히 약식 월 이름을 포함하여 첫 번째 예제의 경우 더 많은 언어를 무신론자 인. 어쨌든 답변 다른 사람들은 여전히이 길을 가기로 결정하는 경우에 당신이 올바른 방향을 가리켜 야합니다 제공합니다.

    특히 귀하의 질문에 대답하지,하지만 애플리케이션의 프리젠 테이션 계층에서 처리해야하는 일이 없습니다. 그것은 당신이 설명하는 방법을 수행하면 별도의 데이터베이스 끝에 처리뿐만 아니라 더 풍부한 날짜, 쉽게 응용 프로그램 측에서 계산 될 수있는 무언가를, (데이터베이스 응용 프로그램이 아닌 다른 시스템에있는 가정) 별도의 네트워크 트래픽을 추가하는 등을 생성 라이브러리를 처리 할뿐만 아니라, 특히 약식 월 이름을 포함하여 첫 번째 예제의 경우 더 많은 언어를 무신론자 인. 어쨌든 답변 다른 사람들은 여전히이 길을 가기로 결정하는 경우에 당신이 올바른 방향을 가리켜 야합니다 제공합니다.

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

    5.그 문은 false입니다. 즉 엔터프라이즈 관리자 또는 SQL Server 날짜를 보여주기 위해 선택하는 단지 방법입니다. 내부적으로는 앤드류에 의해 게시 된 일부 기능이 잘 작동합니다 이유는 8 바이트의 바이너리 값은입니다.

    그 문은 false입니다. 즉 엔터프라이즈 관리자 또는 SQL Server 날짜를 보여주기 위해 선택하는 단지 방법입니다. 내부적으로는 앤드류에 의해 게시 된 일부 기능이 잘 작동합니다 이유는 8 바이트의 바이너리 값은입니다.

    Kibbee뿐만 아니라 유효한 점을 만들고, 완벽한 세계에서 그와 함께 동의 할 것이다. 그러나, 때로는 직접 디스플레이 제어 또는 위젯에 바인드 쿼리 결과에 원하는 서식을 할 수있는 기회가 정말이 아니다. 그리고 때로는 프리젠 테이션 계층은 데이터베이스보다 더 바쁜의 웹 서버에 살고있다. 마음에 그, 그것은 반드시 SQL에서이 작업을 수행하는 방법을 알고 나쁜 일이 아니다.

  6. ==============================

    6.예 출발은 대한 해결책입니다하지만 난 방법 이런 종류의 긴 여행 생각!

    예 출발은 대한 해결책입니다하지만 난 방법 이런 종류의 긴 여행 생각!

    SQL SERVER :

    SELECT CAST(DATEPART(DD,GETDATE()) AS VARCHAR)+'/'
    +CAST(DATEPART(MM,GETDATE()) AS VARCHAR)
    +'/'+CAST(DATEPART(YYYY,GETDATE()) AS VARCHAR)
    +' '+CAST(DATEPART(HH,GETDATE()) AS VARCHAR)
    +':'+CAST(DATEPART(MI,GETDATE()) AS VARCHAR)
    

    신탁:

    Select to_char(sysdate,'DD/MM/YYYY HH24:MI') from dual
    

    당신은 당신이 혼란을 제거 할 수 있습니다이 방법으로 자신의 기능을 쓸 수 있습니다;

    http://sql.dzone.com/news/custom-date-formatting-sql-ser

    select myshortfun(getdate(),myformat)
    GO
    
  7. ==============================

    7.당신은 여기에 필요에 DATEPART 것입니다. 당신은 함께 DATEPART 호출의 결과를 연결할 수 있습니다.

    당신은 여기에 필요에 DATEPART 것입니다. 당신은 함께 DATEPART 호출의 결과를 연결할 수 있습니다.

    월 약어를 얻으려면, 당신은 DATENAME을 사용할 수 있습니다; 그런 당신을 위해 작동하지 않는 경우, 당신은 DATEPART에 CASE 문을 사용할 수 있습니다.

    DATEPART 또한 시간 필드에 적용됩니다.

    나는 DATEPART를 통해 내장 된 새 날짜를 비교하거나 하루에 경과 한 전체 초를 계산하고 그 알려진 AM / PM의 임계 값과 비교를 포함하여 AM / PM 표시를 얻기의 몇 가지 방법을 생각할 수있다.

  8. ==============================

    8.MS SQL 서버에서 당신은 할 수 있습니다 :

    MS SQL 서버에서 당신은 할 수 있습니다 :

    SET DATEFORMAT의 YMD

    년, 달, 일,

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

    9.당신이 차원 모델 필요 DateKey (YYYYMMDD) 같은 그것의 뭔가 더의 특정, 나는 어떤 캐스트 / 변환없이 무언가를 제안하는 경우 :

    당신이 차원 모델 필요 DateKey (YYYYMMDD) 같은 그것의 뭔가 더의 특정, 나는 어떤 캐스트 / 변환없이 무언가를 제안하는 경우 :

    DECLARE @DateKeyToday int = (SELECT 10000 * DATEPART(yy,GETDATE()) + 100 * DATEPART(mm,GETDATE()) + DATEPART(dd,GETDATE()));
    PRINT @DateKeyToday
    
  10. ==============================

    10.나는 사용자 정의 서식에 관련으로 (자신에 대한)이 답변을 추가 해요.

    나는 사용자 정의 서식에 관련으로 (자신에 대한)이 답변을 추가 해요.

    밑줄 yyyy_MM_dd 들어

    REPLACE(SUBSTRING(CONVERT(VARCHAR, @dt, 120), 1, 10),'-','_')
    
  11. from https://stackoverflow.com/questions/202243/custom-date-time-formatting-in-sql-server by cc-by-sa and MIT license