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' 와 같습니다.