date(Transact-SQL)
SQL Server에서 날짜를 정의합니다.
적용 대상: SQL Server(SQL Server 2008 - 현재 버전), Windows Azure SQL 데이터베이스(최초 릴리스 - 현재 릴리스) |
date 설명
속성 |
값 |
---|---|
구문 |
date |
사용법 |
DECLARE @MyDate date CREATE TABLE Table1 ( Column1 date ) |
기본 문자열 리터럴 형식 (하위 클라이언트에 대해 사용됨) |
YYYY-MM-DD 자세한 내용은 뒷부분에 나오는 "하위 클라이언트에 대한 이전 버전과의 호환성" 섹션을 참조하십시오. |
범위 |
0001-01-01부터 9999-12-31까지 서기 1년 1월 1일부터 9999년 12월 31일까지 |
요소 범위 |
YYYY는 0001에서 9999 사이에 속하는 4자리 숫자로, 연도를 나타냅니다. MM은 01에서 12 사이에 속하는 두 자리 숫자로, 지정한 연도의 월을 나타냅니다. DD는 월에 따라 01에서 31 사이에 속하는 두 자리 숫자로, 특정 월의 일을 나타냅니다. |
문자 길이 |
10자리 |
전체 자릿수, 소수 자릿수 |
10, 0 |
저장소 크기 |
3바이트(고정) |
저장소 구조 |
1, 3바이트 정수로 날짜를 저장합니다. |
정확도 |
1일 |
기본값 |
1900-01-01 이 값은 time에서 datetime2 또는 datetimeoffset으로의 암시적 변환을 위해 추가되는 날짜 부분에 사용됩니다. |
달력 |
일반 달력 |
사용자 정의 초 소수 부분 자릿수 |
아니요 |
표준 시간대 오프셋 인식 및 유지 |
아니요 |
일광 절약 시간제 인식 |
아니요 |
date에 대해 지원되는 문자열 리터럴 형식
다음 표에서는 date 데이터 형식에 대해 유효한 문자열 리터럴 형식을 보여 줍니다.
숫자 |
설명 |
---|---|
mdy [m]m/dd/[yy]yy [m]m-dd-[yy]yy [m]m.dd.[yy]yy myd mm/[yy]yy/dd mm-[yy]yy/dd [m]m.[yy]yy.dd dmy dd/[m]m/[yy]yy dd-[m]m-[yy]yy dd.[m]m.[yy]yy dym dd/[yy]yy/[m]m dd-[yy]yy-[m]m dd.[yy]yy.[m]m ymd [yy]yy/[m]m/dd [yy]yy-[m]m-dd [yy]yy-[m]m-dd |
[m]m, dd, [yy]yy는 슬래시(/), 하이픈(-) 또는 마침표(.)로 구분된 문자열에서 월, 일, 연도를 나타냅니다. 네 자리 또는 두 자리 연도만 지원됩니다. 가능하면 네 자리 연도를 사용하십시오. 두 자리 연도를 네 자리 연도로 해석할 구분 연도를 0001에서 9999 사이의 정수 중에서 지정하려면 두 자리 연도 구분 서버 구성 옵션 구성을 사용하십시오. 마지막 두 자리와 같거나 작은 두 자리 연도는 구분 연도와 같은 세기 연도입니다. 두 자리 연도가 구분 연도의 마지막 두 자리보다 크면 구분 연도보다 하나 이전의 세기로 해석됩니다. 예를 들어 두 자리 연도 구분이 2049(기본값)이면 두 자리 연도 49는 2049로 해석되고 두 자리 연도 50은 1950으로 해석됩니다. 기본 날짜 형식은 현재 언어 설정에 따라 결정됩니다. SET LANGUAGE 및 SET DATEFORMAT 문을 사용하여 날짜 형식을 변경할 수 있습니다. ydm 형식은 date에 대해 지원되지 않습니다. |
알파벳 |
설명 |
---|---|
mon [dd][,] yyyy mon dd[,] [yy]yy mon yyyy [dd] [dd] mon[,] yyyy dd mon[,][yy]yy dd [yy]yy mon [dd] yyyy mon yyyy mon [dd] yyyy [dd] mon |
mon은 현재 언어에서 지정된 월의 전체 이름 또는 약어를 나타냅니다. 쉼표는 선택 사항이며 대문자는 무시됩니다. 모호성을 피하려면 4자리 연도를 사용하십시오. 일이 생략된 경우 해당 월의 첫째 날이 사용됩니다. |
ISO 8601 |
설명 |
---|---|
YYYY-MM-DD YYYYMMDD |
SQL 표준과 같습니다. 이는 유일하게 국제 표준으로 정의된 형식입니다. |
구분되지 않음 |
설명 |
---|---|
[yy]yymmdd yyyy[mm][dd] |
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)입니다.
|
ANSI 및 ISO 8601 호환성
date는 일반 달력에 대한 ANSI SQL 표준 정의 "NOTE 85 - Datetime 데이터 형식을 사용하면 일반 달력 형식의 날짜를 0001–01–01 CE에서 9999–12–31 CE 사이에 속하는 날짜 범위에 저장할 수 있습니다."를 따릅니다.
하위 클라이언트에 대해 사용되는 기본 문자열 리터럴 형식은 YYYY-MM-DD로 정의되는 SQL 표준 형식을 따릅니다. 이 형식은 DATE에 대한 ISO 8601 정의와 같습니다.
하위 클라이언트에 대한 이전 버전과의 호환성
일부 하위 클라이언트는 time, date, datetime2 및 datetimeoffset 데이터 형식을 지원하지 않습니다. 다음 표에서는 상위 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] [+|-]hh:mm |
SQL_WVARCHAR 또는 SQL_VARCHAR |
DBTYPE_WSTR 또는 DBTYPE_STR |
Java.sql.String |
String 또는 SqString |
Date 및 Time 데이터 변환
SQL Server에서 날짜 및 시간 데이터 형식을 변환할 때 날짜나 시간으로 인식되지 않는 값은 모두 무시됩니다. 날짜 및 시간 데이터에 CAST 및 CONVERT 함수를 사용하는 방법은 CAST 및 CONVERT(Transact-SQL)를 참조하십시오.
변환할 데이터 형식 |
변환 정보 |
---|---|
time(n) |
변환이 실패하고 "피연산자 유형 충돌: date은(는) time과(와) 호환되지 않습니다"라는 오류 메시지 206이 발생합니다. |
datetime |
날짜가 복사되고 시간 구성 요소가 00:00:00.000으로 설정됩니다. 다음 코드에서는 date 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
smalldatetime |
date 값이 smalldatetime의 범위 안에 있으면 날짜 구성 요소가 복사되고 시간 구성 요소는 00:00:00으로 설정됩니다. date 값이 smalldatetime 값의 범위 밖에 있으면 "date 데이터 형식을 smalldatetime 데이터 형식으로 변환하는 중 값 범위를 벗어났습니다."라는 오류 메시지 242가 발생하고 smalldatetime 값이 NULL로 설정됩니다. 다음 코드에서는 date 값을 smalldatetime 값으로 변환한 결과를 보여 줍니다.
|
datetimeoffset(n) |
날짜가 복사되고 시간은 00:00.0000000 +00:00으로 설정됩니다. 다음 코드에서는 date 값을 datetimeoffset(3) 값으로 변환한 결과를 보여 줍니다.
|
datetime2(n) |
날짜 구성 요소가 복사되고 시간 구성 요소는 (n)의 값에 관계없이 00:00:00.00으로 설정됩니다. 다음 코드에서는 date 값을 datetime2(3) 값으로 변환한 결과를 보여 줍니다.
|
date을 다른 날짜 및 시간 형식으로 변환
다음 표에서는 date 데이터 형식을 다른 날짜/시간 데이터 형식으로 변환하면 어떤 일이 발생하는지를 설명합니다.
변환할 데이터 형식 |
변환 정보 |
---|---|
time(n) |
변환이 실패하고 "피연산자 유형 충돌: date은(는) time과(와) 호환되지 않습니다"라는 오류 메시지 206이 발생합니다. |
datetime |
날짜가 복사됩니다. 다음 코드에서는 date 값을 datetime 값으로 변환한 결과를 보여 줍니다.
|
smalldatetime |
date 값이 smalldatetime의 범위 안에 있으면 날짜 구성 요소는 복사되고 시간 구성 요소는 00:00:00.000으로 설정됩니다. date 값이 smalldatetime 값의 범위 밖에 있으면 "date 데이터 형식을 smalldatetime 데이터 형식으로 변환하는 중 값 범위를 벗어났습니다"라는 오류 메시지 242가 발생하고 smalldatetime 값이 NULL로 설정됩니다. 다음 코드에서는 date 값을 smalldatetime 값으로 변환한 결과를 보여 줍니다.
|
datetimeoffset(n) |
날짜가 복사되고 시간은 00:00.0000000 +00:00으로 설정됩니다. 다음 코드에서는 date 값을 datetimeoffset(3) 값으로 변환한 결과를 보여 줍니다.
|
datetime2(n) |
날짜 구성 요소가 복사되고 시간 구성 요소는 00:00.0000000 +00:00으로 설정됩니다. 다음 코드에서는 date 값을 datetime2(3) 값으로 변환한 결과를 보여 줍니다.
|
문자열 리터럴을 date로 변환
문자열에 포함된 모든 부분의 형식이 올바른 경우 문자열 리터럴에서 날짜/시간 유형으로 변환할 수 있습니다. 그렇지 않으면 런타임 오류가 발생합니다. 날짜/시간 유형에서 문자열 리터럴로의 암시적 변환 또는 명시적 변환에 스타일을 지정하지 않은 경우 현재 세션의 기본 형식이 지정됩니다. 다음 표에서는 문자열 리터럴을 date 데이터 형식으로 변환하는 규칙을 보여 줍니다.
입력 문자열 리터럴 |
date |
---|---|
ODBC DATE |
ODBC 문자열 리터럴은 datetime 데이터 형식으로 매핑됩니다. ODBC DATETIME 리터럴에서 date 형식으로 할당하면 변환 규칙으로 정의된 대로 datetime과 이러한 형식 간에 암시적 변환이 발생합니다. |
ODBC TIME |
이전 ODBC DATE 규칙을 참조하십시오. |
ODBC DATETIME |
이전 ODBC DATE 규칙을 참조하십시오. |
DATE만 |
중요하지 않음 |
TIME만 |
기본값이 제공됩니다. |
TIMEZONE만 |
기본값이 제공됩니다. |
DATE+TIME |
입력 문자열의 DATE 부분이 사용됩니다. |
DATE+TIMEZONE |
허용되지 않습니다. |
TIME+TIMEZONE |
기본값이 제공됩니다. |
DATE+TIME+TIMEZONE |
로컬 DATETIME의 DATE 부분이 사용됩니다. |
예
다음 예에서는 문자열을 각 날짜 및 시간 데이터 형식으로 캐스팅하는 결과를 비교합니다.
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS
'datetimeoffset';
결과 집합은 다음과 같습니다.
데이터 형식 |
출력 |
---|---|
time |
12:35:29. 1234567 |
date |
2007-05-08 |
smalldatetime |
2007-05-08 12:35:00 |
datetime |
2007-05-08 12:35:29.123 |
datetime2 |
2007-05-08 12:35:29. 1234567 |
datetimeoffset |
2007-05-08 12:35:29.1234567 +12:15 |