hoony's web study

날짜관련 함수

2014. 5. 28. 16:33
728x90
반응형


오라클을 쓰다가 문득 날짜포맷이 MSSQL에서 지원하는게 좀 약하지 않나하는 생각이 들었다.
그리고 jquery datepicker 의 경우 허용된 날만 표기를 해줄때 형식이 dd-m-yyyy이다 

이런 형식은 mssql에서는  보통 convert 를 써서
select convert(char(10), getdate(), 126) 이런식으로 변경을 해주는데 세번째 인자값에 따라서 형식을 달라지게 마련이다
하지만 이런 형식말고 특별하게 형식을 바꿀때 써야할 필요가 있어서 구글링을 해보니 딱 맞는 형식의 함수가 있어 
블로깅을 한다.



/****** Object:  UserDefinedFunction [dbo].[fnFormatDate]    Script Date: 2014-05-28 오후 4:27:27 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO



ALTER FUNCTION [dbo].[fnFormatDate] (@Datetime DATETIME, @FormatMask VARCHAR(32))

RETURNS VARCHAR(32)

AS

BEGIN

    DECLARE @StringDate VARCHAR(32)

    SET @StringDate = @FormatMask

    IF (CHARINDEX ('YYYY',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'YYYY',DATENAME(YY, @Datetime))

    IF (CHARINDEX ('YY',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'YY',

                         RIGHT(DATENAME(YY, @Datetime),2))

    IF (CHARINDEX ('Month',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'Month',

                         DATENAME(MM, @Datetime))

    IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)

       SET @StringDate = REPLACE(@StringDate, 'MON',

                         LEFT(UPPER(DATENAME(MM, @Datetime)),3))

    IF (CHARINDEX ('Mon',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'Mon',

                                     LEFT(DATENAME(MM, @Datetime),3))

    IF (CHARINDEX ('MM',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'MM',

                  RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))

    IF (CHARINDEX ('M',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'M',

                         CONVERT(VARCHAR,DATEPART(MM, @Datetime)))

    IF (CHARINDEX ('DD',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'DD',

                         RIGHT('0'+DATENAME(DD, @Datetime),2))

    IF (CHARINDEX ('D',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, 'D',

                                     DATENAME(DD, @Datetime))   

RETURN @StringDate

END

위의 함수를 사용하면 입맛에 맛게 date 포맷을 구성할 수 있다.
좀 오래되어서 출처는 잊어버렸는데 이 함수를 만들어주신 외국인 개발자님께 감사를 표한다. ^^ 



728x90

'DBMS > mssql' 카테고리의 다른 글

My sql table 이 crashed 되었을때  (0) 2016.07.05
UDF 함수를 만들때 GetDate 함수를 쓸수 없을때  (0) 2013.05.10
MS SQL 에 IF - Else 문 사용하기  (0) 2011.01.24
테이블에 컬럼 추가하기  (0) 2011.01.14
MSSQL 로그삭제  (0) 2009.08.22

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading