T-SQL에서 datetime을 문자열로 변환하는 방법


91

나는 이미 여기에서이 질문을 찾을 수 없다는 것에 놀랐다.

날짜 시간 var가 있고 다른 문자열에 추가 할 수 있도록 문자열로 변환하고 싶습니다. 날짜 시간으로 쉽게 변환 할 수있는 형식을 원합니다.

어떻게 할 수 있습니까?

(날짜 부분과 시간 부분을 원합니다.)


@TonyHopkinson 나도 많은 히트 곡을 얻었지만 모두 다른 방식으로 변환하는 것처럼 보였습니다. 또는 더 복잡한 것을 원합니다.
cja

3
을 입력 Convert하고 두 번 클릭하여 강조 표시하고 Shift + F1 ... 항상 첫 번째 방어선을 누릅니다.
에릭 J. 가격

답변:


156

다음 쿼리는 현재 날짜 시간을 가져와 문자열로 변환합니다. 다음 형식으로
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

48
올바른 형식을 얻으려면 임의의 숫자를 전달해야한다는 사실을 여전히 극복 할 수 없습니다
cja

4
@cja 나는 당신의 놀라움을 완전히 공유합니다. 원하는 정확한 형식을 얻기 위해 yyddss 와 같은 문자열을 제공하고 싶습니다. 이에 대한 기술적 또는 역사적 이유가있을 수 있습니다. 그러나 여전히-매우 놀랍습니다.
Konrad Viltersten 2015

2
빠른 수정에 감사 드리지만 귀하의 답변에는 월을 분으로 코딩하고 있습니다. yyyy-MM-dd hh : mm : ss NOT yyyy-mm-dd hh : mm : ss
Tom Martin

이것은 오래되었지만 방금이 스레드를 만났습니다. 를 사용할 때는 결과가 표시되기를 원하는 길이 DateTimeOffSet로 조정해야합니다 varchar. 저에게는 시간대를 원하지 않았기 때문에 사용해야했습니다SELECT convert(varchar(19), sysdatetimeoffset(), 120)
RoLYroLLs


7

convertMicrosoft SQL Server 의 문을 사용하여 날짜를 문자열로 변환 할 수 있습니다 . 사용되는 구문의 예는 다음과 같습니다.

SELECT convert(varchar(20), getdate(), 120)

위는 YYYY-MM-DD HH:MM:SS24 시간 시계 형식의 문자열로 현재 날짜와 시간을 반환합니다 .

명령문 끝에있는 숫자를 반환 된 문자열 형식을 변경하는 많은 숫자 중 하나로 변경할 수 있습니다. 이러한 코드 목록은 MSDN의 CAST 및 CONVERT 참조 섹션 에서 찾을 수 있습니다 .


7

내 요구 사항과 사용중인 버전에 따라 3 가지 방법이 있습니다.

방법은 다음과 같습니다 ..

1) 변환 사용

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) Cast 사용 (SQL Server 2008 이상)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) 고정 길이 문자 데이터 유형 사용

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

5

이전 답변 의 CASTCONVERT함수 외에도 SQL Server 2012 이상을 사용하는 경우 FORMAT 함수를 사용하여 DATETIME기반 유형을 문자열 로 변환 합니다.

다시 변환하려면 반대 PARSE또는 TRYPARSE함수를 사용하십시오 .

형식 지정 스타일은 .NET (ToString () 메서드의 문자열 형식 지정 옵션과 유사)을 기반으로하며 문화권을 인식하는 이점이 있습니다. 예.

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

결과 :

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

내가 뭔가를 놓쳤거나 FORMAT (<date var>, 'dd MMMM yyyy HH : mm : ss') 또는 필요한 사용자 지정 날짜 형식으로 OP 문제가 해결 되었습니까?!
Grim

@Grim 당신도 그렇게 할 수 있습니다. 문서에서The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
g2server

실제로 여기서 너무 열심히 일하고있는 것 같아요. SQL Server에는 DATETIME2에 해당하는 암시 적 문자열이 있습니다. 여기서 실제로 수행하는 것은 암시 적 변환을 활용 한 다음 datetime이 아닌 결과 문자열을 형식화하는 것입니다.
Jamie Marshall

@JamieMarshall 다소. MSDN 제안 :Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
g2server


1
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101-미국-MM / DD / YYYY

108-시간-HH : MI : SS

112-날짜-YYYYMMDD

121-ODBC-YYYY-MM-DD HH : MI : SS.FFF

20-ODBC-YYYY-MM-DD HH : MI : SS


1

이것은 많은 사람들이 대답했지만 가장 간단한 해결책이 빠진 것 같습니다.

SQL SERVER (2012+)에는 여기에 표시된 것처럼 DATETIME2에 대한 암시 적 문자열이 있습니다.

"datetime2에 대해 지원되는 문자열 리터럴 형식"섹션을 참조하십시오.

OP 질문에 명시 적으로 답변하려면 다음 단계를 따르세요.

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

산출:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

참고 : 첫 번째 변수 ( myVar)는 실제로 값 '2019-01-23 12:24:00.0000000'도 보유하고 있습니다. Jan 23 2019 12:24PM를 사용할 때 호출되는 SQL SERVER에 대한 기본 형식 설정으로 인해 형식이 지정됩니다 PRINT. 그것에 의해 여기에 걸려 넘어지지 마십시오. (myVer)='2019-01-23 12:24:00.0000000'


0

아래에서 시도하십시오.

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

1
좋은 !! LEFT도 써야하나요?
Gaurav123 2013

첫 번째 문자 10 개를 사용하므로 날짜 만 원하면 필요하면 필요합니다.
ram4nd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.