문자열을 날짜로 구문 분석하는 방법은 무엇입니까?


답변:




21

데이터베이스가 MS SQL Server 2012 이상이라고 가정하면 작동하는 솔루션이 있습니다. 기본 명령문에는 인라인 try-parse가 포함됩니다.

SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;

프로덕션 버전에서 구현 한 내용은 다음과 같습니다.

UPDATE dbo.StagingInputReview
 SET ReviewedOn = 
     ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
 ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
 -- Check for empty/null/'NULL' text
 WHERE not ReviewedOnText is null 
   AND RTrim(LTrim(ReviewedOnText))<>''
   AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';

ModifiedOn 및 ModifiedBy 열은 내부 데이터베이스 추적 용도로만 사용됩니다.

다음 Microsoft MSDN 참조를 참조하십시오.


이것은 OP가 Sql Server 2012+를 사용하고 있다고 가정합니다
Mark Kram

8

CONVERT가 작동하지만 실제로 사용해서는 안됩니다. SQL-Server에서 문자열 값을 구문 분석하는 이유를 자문해야합니다. 이 작업이 일부 데이터를 수동으로 수정하는 일회성 작업 인 경우 다음 번에는 해당 데이터를 얻지 못할 수도 있지만 응용 프로그램에서이를 사용하는 경우 변경해야합니다. 가장 좋은 방법은 "날짜"데이터 유형을 사용하는 것입니다. 이것이 사용자 입력이라면 더 나쁩니다. 그런 다음 먼저 클라이언트에서 몇 가지 확인을 수행해야합니다. SQL-Server가 날짜를 예상하는 문자열 값을 전달하려면 항상 ISO 형식 ( 'YYYYMMDD')을 사용할 수 있으며 자동으로 변환되어야합니다.


5
일부 외부 시스템에서 데이터 파일을 가져오고 입력 열이 이러한 형식 중 하나 인 경우 (예 : "2013 년 5 월 31 일") 그러나 문자열로 제공되는 상황은 어떻습니까? 데이터를 가져 오기위한 저장 프로 시저를 작성하거나 SSIS를 사용하여 가져 오는 중입니까? 그렇다면 CONVERT는 사용하기에 적절한 것입니다. 그렇지 않습니까?
David Barrows 2013

반드시 그런 것은 아닙니다. MS SQL Server가 분석 데이터 모델을 호스팅하는 상황에서 트랜잭션 모델과 달리 CONVERT를 사용하는 것은 날짜 유형으로 쉽게 제공되지 않는 많은 외부 소스를 처리해야하기 때문에 완벽하게 괜찮습니다. (David Barrows가 위에서 언급했듯이).
2014

날짜의 기본 문자열 리터럴 형식은 YYYY-MM-DD
YB


1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

필요한 것을 수행 할 것입니다.

2012-04-24 00:00:00.000

다른 언어 설정에서도 OP가 게시 한 내용에는 작동하지 않는 것 같습니다. 시도 해봐. 실제로 작동하는 경우 현재 언어 설정을 게시하십시오. 감사. 시도 할 코드는 다음과 같습니다. SELECT CONVERT (DateTime, '24 .04.2012 ', 121) AS ExpireDate
Jeff Moden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.