9.1.3 날짜 리터럴과 시간 리터럴
날짜 값과 시간 값은 값의 정확한 형태와 다른 요인에 따라 인용 된 문자열이나 숫자 등 여러 형식으로 표현할 수 있습니다. 예를 들어, MySQL이 날짜를 예상하는 맥락에서, '2015-07-21'
, '20150721'
, 20150721
의 모두 날짜로 해석합니다.
이 섹션에서는 날짜 리터럴과 시간 리터럴 허용되는 형식에 대해 설명합니다. 허용되는 값의 범위 등 시간 데이터 형식의 자세한 내용은 다음 섹션을 참조하십시오.
섹션 11.1.2 "날짜 및 시간 형식 요약"
11.3 절 "날짜 및 시간 형"
표준 SQL과 ODBC 날짜 및 시간 리터럴 SQL 표준 형식 키워드 및 문자열을 사용하여 시간 리터럴을 지정할 수 있습니다. 키워드와 문자열 사이의 공백은 옵션입니다.
DATE 'str
' TIME 'str
' TIMESTAMP 'str
'
MySQL은 이러한 구조 및 해당 ODBC 구문을 인식합니다.
{d 'str
'} {t 'str
'} {ts 'str
'}
MySQL 5.6.4 이전에는, MySQL은 형태 키워드를 무시하고 이전의 각 구조, 형태가 VARCHAR
문자열 값
을 생성합니다. ' str '
5.6.4 이후, MySQL은 형태 키워드를 사용하여 이러한 구조는 각각 후속 소수 초 부분이 지정된 경우이 부분을 포함 DATE
, TIME
및 DATETIME
값을 생성합니다. DATETIME
은 표준 SQL의 TIMESTAMP
형 더 가깝게 대응하는 범위가 있으며, 여기에는 0001
에서 9999
년 범위가 포함되므로, TIMESTAMP
구문은 MySQL에서 DATETIME
값을 생성합니다. (MySQL의 TIMESTAMP
년 범위는 1970
에서 2038
입니다.)
일시 컨텍스트에서 문자열 리터럴과 숫자 리터럴 MySQL은 다음 형식으로 DATE
값을 인식합니다.
'YYYY-MM-DD'
또는'YY-MM-DD'
형식의 문자열로. "완만 한"구문이 허용됩니다. 어떤 구두점 문자도 날짜 부분 사이의 구분 기호로 사용할 수 있습니다. 예를 들어,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
및'2012@12@31'
은 동일합니다.'YYYYMMDD'
또는'YYMMDD'
형식의 구분 문자가없는 문자열 (날짜로서 적절한 것)로. 예를 들어,'20070523'
과'070523'
는'2007-05-23'
로 해석되지만,'071332'
는 올바르지 않기 때문에 (달과 일이 부적절),'0000-00-00'
입니다 합니다.YYYYMMDD
또는YYMMDD
형식의 수치 (일자로서 적절한 것)로. 예를 들어,19830905
과830905
은'1983-09-05'
로 해석됩니다.
MySQL은 다음 형식으로 DATETIME
과 TIMESTAMP
값을 인식합니다.
'YYYY-MM-DD HH:MM:SS'
또는'YY-MM-DD HH:MM:SS'
형식의 문자열로. "완만 한"구문은 여기에서도 허용됩니다. 어떤 구두점 문자도 날짜 부분 또는 시간 부분 사이의 구분 기호로 사용할 수 있습니다. 예를 들어,'2012-12-31 11:30:45'
,'2012^12^31 11+30+45'
''2012/12/31 11*30*45'
및'2012@12@31 11^30^45'
은 동일합니다.날짜 및 시간 부분과 소수 초 부분 사이의 구분 기호로 인식되는 유일한 문자가 소수점입니다.
날짜 부분과 시간 부분은 공백이 아닌
T
로 구분할 수 있습니다. 예를 들어,'2012-12-31 11:30:45'
과'2012-12-31T11:30:45'
은 동일합니다.'YYYYMMDDHHMMSS'
또는'YYMMDDHHMMSS'
형식의 구분 문자가없는 문자열 (날짜로서 적절한 것)로. 예를 들어,'20070523091528'
과'070523091528'
는'2007-05-23 09:15:28'
로 해석되지만,'071122129015'
는 잘못되어 (분 부분이 잘못된)'0000-00-00 00:00:00'
입니다.YYYYMMDDHHMMSS
또는YYMMDDHHMMSS
형식의 수치 (일자로서 적절한 것)로. 예를 들어,19830905132800
과830905132800
는'1983-09-05 13:28:00'
로 해석됩니다.
DATETIME
또는 TIMESTAMP
값은 마이크로 초 (6 자리)까지의 정밀도 후속 소수 초 부분을 포함 할 수 있습니다. 소수는 항상 시간의 나머지 부분에서 소수점으로 구분해야합니다. 이외의 소수 초 단락 문자는 인식되지 않습니다. MySQL의 소수 초 지원 자세한 내용은 섹션 11.3.6 "시간 값의 소수 초" 를 참조하십시오.
두 자리 연도를 포함한 날짜 값은 세기가 알 수 없기 때문에 모호합니다. MySQL은 다음 규칙을 사용하여 2 자리 연도 값을 해석합니다.
70-99
범위의 값은1970-1999
로 변환됩니다.00-69
범위의 값은2000-2069
로 변환됩니다.
섹션 11.3.8 "날짜에서 2 자리 연도" 를 참조하십시오.
날짜 부분 구분 문자를 포함하는 문자열로 지정되는 값의 경우, 10
미만 달 또는 일의 값에 2 자리를 지정할 필요가 없습니다. '2015-6-9'
는 '2015-06-09'
와 같습니다. 마찬가지로, 시간 부분 구분 문자를 포함하는 문자열로 지정되는 값의 경우, 10
미만의시, 분 또는 초 값에 2 자리를 지정할 필요가 없습니다. '2015-10-30 1:2:3'
는 '2015-10-30 01:02:03'
와 같습니다.
숫자로 지정하는 값은 6,8,12,14 중 하나 자릿수하도록하십시오. 숫자 8 자리 또는 14 자리의 길이로하면 YYYYMMDD
또는 YYYYMMDDHHMMSS
형식이며, 최초의 4 자리수가 해이라고 상정됩니다. 숫자 6 자리 또는 12 자리의 길이로하면 YYMMDD
또는 YYMMDDHHMMSS
형식이며, 최초의 2 자리수가 해이라고 상정됩니다. 이 길이가 아닌 숫자는 가장 가까운 길이까지 선행 0으로 채워져있는 것처럼 해석됩니다.
구분 문자가없는 문자열로 지정된 값은 그 길이에 따라 해석됩니다. 8 또는 14 자 길이의 문자열의 경우 연도는 처음 4 글자로 표현하는 것으로 간주됩니다. 그렇지 않으면, 해는 첫 두 글자로 표현하는 것으로 간주됩니다. 문자열은 문자열에 존재하는 유일한 부분, 왼쪽에서 오른쪽으로 순서대로 년, 월, 일,시, 분, 초로 해석됩니다. 이것은 6 자 미만 문자열은 사용하지 말아야한다는 것을 의미합니다. 예를 들어, 1999 년 3 월을 나타낸다고 생각 '9903'
를 지정하면, MySQL은 '제로'날짜 값으로 변환합니다. 이것은 연도와 월의 값은 99
과 03
이더라도, 일 부분이 완전히 누락되어 있기 때문에 발생합니다. 그러나 명시 적으로 값 제로를 지정하여 누락 된 달과 일 부분을 나타낼 수 있습니다. 예를 들어, '1999-03-00'
값을 삽입하려면 '990300'
를 사용합니다.
MySQL은 다음 형식으로 TIME
값을 인식합니다.
'D HH:MM:SS'
형식의 문자열로.'HH:MM:SS'
,'HH:MM'
,'D HH:MM'
,'D HH'
,'SS'
중 하나 "느슨한"구문도 사용할 수 있습니다. 이 경우D
는 일을 나타내며 0에서 34의 값을 지정할 수 있습니다.'HHMMSS'
형식의 구분 문자가없는 문자열 (시간으로서 적절한 것)로. 예를 들어,'101112'
은'10:11:12'
으로 인식되지만,'109712'
는 잘못되어 (분 부분이 부적절),'00:00:00'
입니다.HHMMSS
형식의 수치 (시간으로서 적절한 것)로. 예를 들어,101112
은'10:11:12'
으로 인식됩니다.SS
,MMSS
,HHMMSS
의 대체 형식도 인식됩니다.
후속 소수 초 부분은 'D HH:MM:SS.fraction'
, 'HH:MM:SS.fraction'
, 'HHMMSS.fraction'
및 HHMMSS.fraction
시간 형식으로 인식됩니다. 여기서 fraction
은 마이크로 초 (6 자리)까지의 정밀도로 표현되는 소수 부분입니다. 소수는 항상 시간의 나머지 부분에서 소수점으로 구분해야합니다. 이외의 소수 초 단락 문자는 인식되지 않습니다. MySQL의 소수 초 지원 자세한 내용은 섹션 11.3.6 "시간 값의 소수 초" 를 참조하십시오.
시간 부분 구분 문자를 포함하는 문자열로 지정되는 TIME
값의 경우 10
미만의시, 분, 초 값에 2 자리를 지정할 필요가 없습니다. '8:3:2'
는 '08:03:02'
와 같습니다.