TSQL DATTIME 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 "날짜/시간" 데이터 유형 중 하나(DATIME, DATE, TIME, DATETIME2 등)를 저장합니다.파일을 빌드할 준비 테이블을 작성할 때 프런트 엔드 코드가 표시 방법을 해결하고 형식이 지정된 날짜만 저장하도록 합니다.SQL Server에서 ISO 날짜/시간 형식을 표시해야 하는 경우 표시 시간에만 표시합니다.SQL Server에 형식이 지정된 날짜/시간을 저장하지 마십시오.
{Edit}. 그 이유는 여러 가지가 있지만 가장 확실한 것은 멋진 ISO 형식(정렬 가능)을 사용하더라도 미래의 모든 날짜 계산 및 검색(특정 달의 모든 행 검색,예를 들어, 저장된 형식 날짜가 현재 필요한 형식이 아닌 경우에는 먼저 날짜로 변환한 다음 원하는 형식으로 변환해야 합니다.
프런트 엔드 코드에서도 마찬가지입니다.형식 지정된 날짜(텍스트)를 저장하는 경우 창 또는 앱에서 정의한 로컬 날짜 형식을 표시하려면 동일한 회전이 필요합니다.
날짜/시간은 항상 DATTIME 또는 기타 시간 데이터 유형으로 저장하고 표시 시에만 형식을 지정하는 것이 좋습니다.
ISO 날짜와 관련하여 기술적으로 두 가지 옵션이 옵션은 다음과 같습니다.
일반적으로 날짜 값만 필터링하거나 중립적인 방식으로 날짜를 유지하려는 경우.Microsoft는 다음의 언어 중립 형식을 사용할 것을 권장합니다.ymd
또는y-m-d
둘 다 유효한 ISO 형식입니다.
'2007-02-12' 형식은 DATE, DATIME2 및 DATIMEOFSET 데이터 유형에 대해서만 언어 중립으로 간주됩니다.
따라서 항상 natural을 기준으로 지속/필터링하는 것이 가장 안전합니다. ymd
서식을 정하다
코드:
select convert(char(10), getdate(), 126) -- ISO YYYY-MM-DD
select convert(char(8), getdate(), 112) -- ISO YYYYMMDD (safest)
Datetime 및 Datetime2용 ISO 8601 형식의 경우 아래는 SQL Server의 권장 사항입니다.datetime(yyyyMMdThhmmss)에 대한 기본 ISO 8601 형식을 지원하지 않습니다.
날짜 시간
YYY-MM-DDThh:mm:ss[.mmm]
YYYMMDD[hh:mm:ss[.mm]]
예:
2004-05-23T 14:25:10
2004-05-23T 14:25:10.487
Datetime2
YYY-MM-DDThh:mm:ss[.nnnnnn]
YYY-MM-DDThh:mm:ss[.nnnnnn] 예:
2004-05-23T 14:25:10
2004-05-23T 14:25:10.8849926
126 옵션을 사용하여 변환할 수 있습니다.
--Datetime
DECLARE @table Table(ExtendedDate DATETIME, BasicDate Datetime)
DECLARE @ExtendedDate VARCHAR(30) = '2020-07-01T08:39:17' , @BasicDate VARCHAR(30) = '2009-01-23T10:53:21.000'
INSERT INTO @table(ExtendedDate, BasicDate)
SELECT convert(datetime,@ExtendedDate,126) ,convert(datetime,@BasicDate,126)
SELECT * FROM @table
go
-- Datetime2
DECLARE @table Table(ExtendedDate DATETIME2, BasicDate Datetime2)
DECLARE @ExtendedDate VARCHAR(30) = '2000-01-14T13:42:00.0000000' , @BasicDate VARCHAR(30) = '2009-01-23T10:53:21.0000000'
INSERT INTO @table(ExtendedDate, BasicDate)
SELECT convert(datetime2,@ExtendedDate,126) ,convert(datetime2,@BasicDate,126)
SELECT * FROM @table
go
날짜/시간
+-------------------------+-------------------------+
| ExtendedDate | BasicDate |
+-------------------------+-------------------------+
| 2020-07-01 08:39:17.000 | 2009-01-23 10:53:21.000 |
+-------------------------+-------------------------+
Datetime2
+-----------------------------+-----------------------------+
| ExtendedDate | BasicDate |
+-----------------------------+-----------------------------+
| 2000-01-14 13:42:00.0000000 | 2009-01-23 10:53:21.0000000 |
+-----------------------------+-----------------------------+
이것은 매우 오래된 질문이지만, 제가 대답할 가치가 있는 것을 찾다가 여기에 왔기 때문입니다.
SELECT DATEPART(ISO_WEEK,'2020-11-13') AS ISO_8601_WeekNr
언급URL : https://stackoverflow.com/questions/813238/tsql-datetime-iso-8601
'programing' 카테고리의 다른 글
ELMAH를 사용한 WCF 서비스에 대한 예외 로깅 (0) | 2023.07.06 |
---|---|
Postgresql: 암호를 사용하여 psql 실행 스크립팅 (0) | 2023.07.06 |
삭제된 파일을 복원할 수 있습니까('git clean -fdx'를 해제합니다)? (0) | 2023.07.06 |
JUQ를 사용한 Spring Boot과 Spring Data JPA의 기술적 차이 (0) | 2023.07.06 |
유형 스크립트의 선택적 클래스 구성원 (0) | 2023.07.01 |