다음을 통해 공유


date(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) SQL 분석 엔드포인트

SQL Server에서 날짜를 정의합니다. 날짜 데이터 형식은 SQL Server 2008(10.0.x)에서 도입되었습니다.

날짜 설명

속성
구문 DATE
사용 DECLARE @MyDate DATE

CREATE TABLE Table1 (Column1 DATE)
기본 문자열 리터럴 형식

(하위 수준 클라이언트에 사용됨)
yyyy-MM-dd

자세한 내용은 하위 수준 클라이언트에 대한 이전 버전과의 호환성 섹션을 참조하세요 .
범위 0001-01-01 through 9999-12-31 (1582-10-15 9999-12-31 through for Informatica)

9999년 1월 1일 CE(일반 시대)에서 9999년 12월 31일까지(1582년 10월 15일부터 9999년 12월 31일까지 Informatica CE)
요소 범위 yyyy 는 연도를 나타내는 4자리 숫자입니다 0001 9999 . Informatica는 범위 1582 에서 .로 9999제한됩니다yyyy.

MM 는 지정된 연도의 월을 나타내는 두 자리 숫자입니다 01 12 .

dd 는 지정된 월의 일을 나타내는 월에 따라 두 자리 01 31숫자입니다.
문자 길이 10 위치
전체 자릿수, 소수 자릿수 10, 0
스토리지 크기 3바이트(고정)
스토리지 구조 3-바이트 정수 1개 저장 날짜
정확도(Accuracy) 1일
Default value 1900-01-01

이 값은 시간에서 datetime2 또는 datetimeoffset으로의 암시적 변환을 위해 추가된 날짜 부분에 사용됩니다.
캘린더 양력
사용자 정의 초 소수 부분 자릿수 아니요
표준 시간대 오프셋 인식 및 유지 아니요
일광 절약 시간 인식 아니요

date에 대해 지원되는 문자열 리터럴 형식

다음 목록에서는 날짜 데이터 형식에 대한 유효한 문자열 리터럴 형식을 보여 줍니다.

[m]m, dd[yy]yy 슬래시 기호(), 하이픈-() 또는 마침표(/)를 구분 기호로 사용하여 문자열에서 월, 일 및 연도를. 나타냅니다.

4자리 또는 2자리 연도만 지원됩니다. 가능하면 4자리 연도를 사용합니다. 두 자리 연도를 0001 4자리 연도로 해석하기 9999 위한 구분 연도를 나타내는 정수를 지정하려면 두 자리 연도 구분 서버 구성 옵션을 사용합니다.

Informatica의 yyyy 경우 범위 1582 는 .로 9999제한됩니다.

컷오프 연도의 마지막 두 자릿수보다 작거나 같은 두 자리 연도는 컷오프 연도와 같은 세기에 있습니다. 컷오프 연도의 마지막 두 자리보다 큰 두 자리 연도는 컷오프 연도 이전에 오는 세기입니다. 예를 들어 두 자리 연도 구분이 기본값 2049인 경우 두 자리 연도 49 가 해석 2049 되고 두 자리 연도 50 가 로 1950해석됩니다.

현재 언어 설정은 기본 날짜 형식을 결정합니다. SET LANGUAGESET DATEFORMAT 문을 사용하여 날짜 형식을 변경할 수 있습니다.

형식은 ydm 날짜에 지원되지 않습니다.

월-일 연도의 문자열 리터럴 형식

SET DATEFORMAT mdy;
  • [m]m/dd/[yy]yy
  • [m]m-dd-[yy]yy

월-연도 일의 문자열 리터럴 형식

SET DATEFORMAT myd;
  • [m]m/[yy]yy/dd
  • [m]m-[yy]yy-dd
  • [m]m.[yy]yy.dd

일/월 연도의 문자열 리터럴 형식

SET DATEFORMAT dmy;
  • dd/[m]m/[yy]yy
  • dd-[m]m-[yy]yy
  • dd.[m]m.[yy]yy

일/월의 문자열 리터럴 형식

SET DATEFORMAT dym;
  • dd/[yy]yy/[m]m
  • dd-[yy]yy-[m]m
  • dd.[yy]yy.[m]m

연도-월 일의 문자열 리터럴 형식

SET DATEFORMAT ymd;
  • [yy]yy/[m]m/dd
  • [yy]yy-[m]m-dd
  • [yy]yy-[m]m-dd

사전순 서식 목록

  • [dd] mon[,] yyyy
  • dd mon[,][yy]yy
  • dd [yy]yy mon
  • [dd] yyyy mon
  • mon [dd][,] yyyy
  • mon dd[,] [yy]
  • mon yyyy [dd]
  • yyyy mon [dd]
  • yyyy [dd] mon

mon 는 현재 언어로 지정된 전체 월 이름 또는 월 약어를 나타냅니다. 쉼표는 선택 사항이며 대문자는 무시됩니다.

모호성을 피하려면 4자리 연도를 사용하세요.

날짜가 누락된 경우 해당 월의 첫째 날이 제공됩니다.

ISO 8601 형식 목록

  • yyyy-MM-dd
  • yyyyMMdd

SQL 표준과 동일합니다. 이 형식은 국제 표준으로 정의된 유일한 형식입니다.

관리되지 않는 형식 목록

  • [yy]yyMMdd
  • yyyy[MMdd]

date 데이터는 4자리, 6자리 또는 8자리로 지정할 수 있습니다. 6자리 또는 8자리 문자열은 항상 .로 ymd해석됩니다. 월과 요일은 항상 두 자리여야 합니다. 4자리 문자열은 연도로 해석됩니다.

ODBC 날짜 형식

  • { d 'yyyy-MM-dd' }

ODBC API에 따라 다릅니다.

W3C XML 날짜 형식

  • yyyy-MM-ddTZD

XML/SOAP 사용에 대해 지원됩니다.

TZD 은 표준 시간대 지정자(Z 또는 +hh:mm ) -hh:mm입니다.

  • hh:mm 는 표준 시간대 오프셋을 나타냅니다. hh 는 표준 시간대 오프셋의 시간 수를 나타내는 두 자리 숫자입니다 0 14.

  • mm 는 표준 시간대 오프셋의 추가 시간(분)을 나타내는 두 자리 숫자입니다 0 59.

  • + (더하기) 또는 - (빼기)는 표준 시간대 오프셋의 필수 기호입니다. 이 기호는 현지 시간을 얻기 위해 표준 시간대 오프셋이 UTC(협정 세계시) 시간에서 추가되거나 뺍니다. 표준 시간대 오프셋의 유효한 범위는 다음에서 -14:00 입니다 +14:00.

ANSI 및 ISO 8601 규정 준수

날짜 는 그레고리오력에 대한 ANSI SQL 표준 정의를 준수합니다.

날짜/시간 데이터 형식을 사용하면 그레고리오 형식의 날짜를 9999-12-31 CE까지 날짜 범위 0001-01-01 CE에 저장할 수 있습니다.

하위 수준 클라이언트에 사용되는 기본 문자열 리터럴 형식은 정의된 SQL 표준 형식 yyyy-MM-dd을 준수합니다. 이 형식은 ISO 8601 정의 DATE와 동일합니다.

참고 항목

Informatica의 경우 범위는 (1582년 10월 15일 CE)에서 9999-12-31 (9999년 12월 31일 CE)로 제한 1582-10-15 됩니다.

하위 수준 클라이언트에 대한 이전 버전과의 호환성

일부 하위 수준 클라이언트는 시간, 날짜, datetime2datetimeoffset 데이터 형식을 지원하지 않습니다. 다음 표에서는 SQL Server의 상위 수준 인스턴스와 하위 수준 클라이언트 간의 형식 매핑을 보여 줍니다.

SQL Server 데이터 형식 하위 수준 클라이언트에 전달되는 기본 문자열 리터럴 형식 하위 수준 ODBC 하위 수준 OLEDB 하위 수준 JDBC 하위 수준 SQLCLIENT
time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String String 또는 SqString
date yyyy-MM-dd SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String String 또는 SqString
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String String 또는 SqString
datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm SQL_WVARCHAR 또는 SQL_VARCHAR DBTYPE_WSTR 또는 DBTYPE_STR Java.sql.String String 또는 SqString

날짜 및 시간 데이터 변환

날짜 및 시간 데이터 형식으로 변환할 때 SQL Server는 날짜 또는 시간으로 인식되지 않는 모든 값을 거부합니다. 날짜 및 시간 데이터와 함께 함수 및 CONVERT 함수를 사용하는 CAST 방법에 대한 자세한 내용은 CAST 및 CONVERT를 참조하세요.

날짜를 다른 날짜 및 시간 형식으로 변환

이 섹션에서는 date 데이터 형식을 다른 날짜 및 시간 데이터 형식으로 변환할 때 어떤 일이 발생하는지를 설명합니다.

변환이 time(n)이면 변환이 실패하고 오류 메시지 206이 발생합니다.

피연산자 형식 충돌: 날짜는 시간과 호환되지 않습니다.

datetime으로 변환하는 경우 날짜 구성 요소가 복사됩니다. 다음 코드는 날짜 값을 datetime 값으로 변환한 결과를 보여줍니다.

DECLARE @date AS DATE = '12-10-25';

DECLARE @datetime AS DATETIME = @date;

SELECT @date AS '@date',
       @datetime AS '@datetime';

결과 집합은 다음과 같습니다.

@date      @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000

smalldatetime으로 변환되면 날짜 값이 smalldatetime 범위에 있고, 날짜 구성 요소가 복사되고, 시간 구성 요소가 로 00:00:00.000설정됩니다. 날짜 값이 smalldatetime 값 범위를 벗어나면 오류 메시지 242가 발생하고 smalldatetime 값이 다음으로 NULL설정됩니다.

날짜 데이터 형식을 smalldatetime 데이터 형식으로 변환하면 범위를 벗어난 값이 생성되었습니다.

다음 코드는 날짜 값을 smalldatetime 값으로 변환한 결과를 보여줍니다.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @smalldatetime AS SMALLDATETIME = @date;

SELECT @date AS '@date',
       @smalldatetime AS '@smalldatetime';

결과 집합은 다음과 같습니다.

@date      @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00

datetimeoffset(n)로 변환하는 경우 날짜가 복사되고 시간이 .로 00:00.0000000 +00:00설정됩니다. 다음 코드에서는 날짜 값을 datetimeoffset(3) 값으로 변환한 결과를 보여 줍니다.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;

SELECT @date AS '@date',
       @datetimeoffset AS '@datetimeoffset';

결과 집합은 다음과 같습니다.

@date      @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00

datetime2(n)변환되면 날짜 구성 요소가 복사되고 시간 구성 요소가 로 설정00:00.000000됩니다. 다음 코드에서는 날짜 값을 datetime2(3) 값으로 변환한 결과를 보여 줍니다.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetime2 AS DATETIME2 (3) = @date;

SELECT @date AS '@date',
       @datetime2 AS '@datetime2(3)';

결과 집합은 다음과 같습니다.

@date      @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000

문자열 리터럴을 날짜로 변환

문자열의 모든 부분이 유효한 형식인 경우 문자열 리터럴에서 날짜 및 시간 형식으로 변환할 수 있습니다. 그렇지 않으면 런타임 오류가 발생합니다. 날짜 및 시간 형식에서 문자열 리터럴로 스타일을 지정하지 않는 암시적 변환 또는 명시적 변환은 현재 세션의 기본 형식입니다. 다음 표에서는 문자열 리터럴을 날짜 데이터 형식으로 변환하는 규칙을 보여줍니다.

입력 문자열 리터럴 date
ODBC 날짜 ODBC 문자열 리터럴은 datetime 데이터 형식에 매핑됩니다. ODBC DATETIME 리터럴에서 날짜 형식으로 할당 작업을 수행하면 datetime과 변환 규칙이 정의하는 형식 간에 암시적 변환이 발생합니다.
ODBC 시간 이전 ODBC DATE 규칙을 참조하세요.
ODBC DATETIME 이전 ODBC DATE 규칙을 참조하세요.
날짜만 중요하지 않음
TIME만 기본값이 제공됩니다.
표준 시간대만 기본값이 제공됩니다.
날짜 + 시간 입력 문자열의 DATE 부분이 사용됩니다.
날짜 + 표준 시간대 허용되지 않음.
TIME+TIMEZONE 기본값이 제공됩니다.
DATE+TIME+TIMEZONE 로컬 DATETIME의 DATE 부분이 사용됩니다.

예제

다음 예제에서는 각 날짜 및 시간 데이터 형식에 문자열을 캐스팅한 결과를 비교합니다.

SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
       CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
       CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';

결과 집합은 다음과 같습니다.

데이터 형식 출력
time 12:35:29.1234567
date 2022-05-08
smalldatetime 2022-05-08 12:35:00
datetime 2022-05-08 12:35:29.123
datetime2 2022-05-08 12:35:29.1234567
datetimeoffset 2022-05-08 12:35:29.1234567 +12:15