Program Club

TSQL 날짜 시간 ISO 8601

proclub 2021. 1. 6. 19:58
반응형

TSQL 날짜 시간 ISO 8601


ISO 8601날짜 형식 이 필요한 사양을 받았으며 변환 코드 또는 다음 두 가지 예를 얻는 방법을 아는 사람이 있습니까?

ISO 8601 Extended Date 2000-01-14T13:42Z 
ISO 8601 Basic Date 20090123T105321Z

SQL Server에서 날짜를 처리 할 때 ISO-8601 형식은 언어 및 문화 설정에 관계없이 작동하기 때문에 아마도 가장 좋은 방법 일 것입니다.

SQL Server 테이블에 데이터를 삽입하려면 변환 코드 나 다른 것이 필요하지 않습니다. 날짜를 리터럴 문자열로 지정하기 만하면됩니다.

INSERT INTO MyTable(DateColumn) VALUES('20090430 12:34:56.790')

그리고 당신은 끝났습니다.

SELECT에서 날짜 열을 ISO-8601 형식으로 변환해야하는 경우 변환 코드 126 또는 127 (시간대 정보 포함)을 사용하여 ISO 형식을 얻을 수 있습니다.

SELECT CONVERT(VARCHAR(33), DateColumn, 126) FROM MyTable

당신에게 줄 것 :

2009-04-30T12:34:56.790

SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)

이것을 생산할 것이다

2009-05-01T14:18:12.430

이에 대한 자세한 내용은 MSDN 에서 찾을 수 있습니다 .


후행 Z를 포함하여 ISO8601 형식으로 날짜를 출력해야하고 최소한 SQL Server 2012를 사용하는 경우 다음을 사용할 수 있습니다 FORMAT.

SELECT FORMAT(GetUtcDate(),'yyyy-MM-ddTHH:mm:ssZ')

이것은 당신에게 다음과 같은 것을 줄 것입니다.

2016-02-18T21:34:14Z

@Pxtl이 주석에서 지적했듯이 FORMAT은 성능에 영향을 미칠 수 있으며, 유연성이 제공하는 것과 비교할 때 고려해야 할 비용입니다.


이런, 안돼 !!! 형식이 지정된 날짜를 SQL Server에 저장하면 상처의 세계를 요구하고 있습니다. 항상 날짜 및 시간과 SQL Server "날짜 / 시간"데이터 유형 (DATETIME, DATE, TIME, DATETIME2 등) 중 하나를 저장하십시오. 프런트 엔드 코드가 표시 방법을 확인하고 파일을 빌드 할 준비 테이블을 빌드 할 때 형식이 지정된 날짜 만 저장하도록합니다. SQL Server에서 ISO 날짜 / 시간 형식을 반드시 표시해야하는 경우 표시 시간에만 표시해야합니다. 충분히 강조 할 수는 없습니다 ... 형식이 지정된 날짜 / 시간을 SQL Server에 저장하지 마십시오.

{편집하다}. 그 이유는 많지만 가장 분명한 것은 좋은 ISO 형식 (정렬 가능)을 사용하더라도 모든 미래 날짜 계산 및 검색 (예 : 주어진 달의 모든 행 검색)에는 적어도 암시 적 변환 (추가 시간이 소요됨) 및 저장된 형식의 날짜가 현재 필요한 형식이 아닌 경우 먼저 날짜로 변환 한 다음 원하는 형식으로 변환해야합니다.

프런트 엔드 코드도 마찬가지입니다. 형식이 지정된 날짜 (텍스트)를 저장하는 경우 Windows 또는 앱에서 정의한 로컬 날짜 형식을 표시하려면 동일한 회전이 필요합니다.

내 권장 사항은 항상 날짜 / 시간을 DATETIME 또는 기타 임시 데이터 유형으로 저장하고 표시 시간에만 날짜 형식을 지정하는 것입니다.


ISO 날짜에 대해 말할 때 기술적으로 두 가지 옵션이 있습니다.

일반적으로 날짜 값만 특별히 필터링 하거나 중립적 인 방식으로 날짜를 유지하려는 경우입니다. 언어 중립적 형식 ymd또는 y-m-d. 둘 다 유효한 ISO 형식입니다.

'2007-02-12'양식은 DATE, DATETIME2 및 DATETIMEOFFSET 데이터 유형에 대해서만 언어 중립적 인 것으로 간주됩니다.

이 때문에 가장 안전한 방법은 항상 네트워크 ymd 형식을 기반으로 유지 / 필터링하는 것 입니다.

코드:

select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)

참조 URL : https://stackoverflow.com/questions/813238/tsql-datetime-iso-8601

반응형