2013-09-03 3 views
9

은 dd.mm.yy 형식의 데이터를 YYYY-MM-DD 형식으로 변환하는 mySQL 함수가 있습니까? 예 : 03.09.13 -> 2013-09-03SQL 날짜 형식을 변환 하시겠습니까? [dd.mm.yy부터 YYYY-MM-DD]

+1

입력 내용이 날짜 유형입니까, 아니면 문자 그대로 '03.09.13'입니까? –

+0

@ ppeterka66 예, 여기에 묻는 것은 아마 그 대답을 찾지 못하거나 이해하지 못했음을 의미합니다. – user2216190

+0

@EdGibbs 문자열입니다. – user2216190

답변

29

양식 03.09.13의 문자열 (오늘 9 월 3, 2013 년 이후), 나는 그것이 DD-MM-YY 있다고 가정합니다입니다. 당신은 STR_TO_DATE를 사용하여 날짜로 변환 할 수 있습니다 : STR_TO_DATE에서 올해 %y는 ("Y"소문자)되는 것을

DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%y'), '%Y-%m-%d') 

참고 :

STR_TO_DATE(myVal, '%d.%m.%y') 

은 그럼 당신은 DATE_FORMAT를 사용하여 다시 문자열로 포맷 할 수 있습니다 %Y (대문자 "Y")은 DATE_FORMAT입니다. 소문자 버전은 두 자리 연도이고 대문자는 네 자리 연도입니다.

+2

DATE_FORMAT (STR_TO_DATE (myVal, '% d. % m. % Y'), '% Y- % m- % d') Y는 대문자입니다. –

+0

Rajavel - 입력 문자열에 2 자리 연도 ('03.09.13')가 있으므로 첫 번째 소문자'y '입니다. 두 번째 경우에는 대문자이므로 결과는 4 자리 연도 ('2013-09-03')가됩니다. –

+0

감사합니다. –

4

사용

SELECT CONCAT(
'20', 
SUBSTR('03.09.13', 7, 2), 
'-', 
SUBSTR('03.09.13', 4, 2), 
'-', 
SUBSTR('03.09.13', 1, 2)) 

바이올린 demo합니다.

자세한 내용은 해당 manual page에서 읽을 수 있습니다. 팁 : 이것이 비 datetime 필드의 변환 값인 경우 DATE/DATETIME 데이터 유형을 사용하는 것이 좋습니다. 그러나 이것은 으로 문자열 기능을 통해 날짜와 작동하는 것은 바람직하지 않습니다. 위의 멋진 트릭이 STR_TO_DATE입니다 (이 코드는 반복하지 않음).

+0

작동하지 않습니다. 'DATE_FORMAT'은 입력 한 날짜가 Y-m-d 형식이어야합니다. 귀하의 질의 (만약 당신이 그것을 실행)'2003-09-13', 분명히 틀린 – Lee

+0

반환됩니다 네, (불행히도, 전송 후) - 업데이트. –

+0

나는이 방법을 생각하지 않았기 때문에, 내 투표를 upvote로 되돌 렸습니다. 개인적으로 추천할만한 게 아니지만 (당신도 그 중 하나 일 것 같네요), 그의 독특한 요구 사항을 감안할 때, 그것을하는 유일한 방법 인 것 같습니다. – Lee

1

날짜는 내부 형식을 사용하여 저장됩니다. date_format() 함수를 사용하여 다양한 형식을 사용하여 문자열로 변환 할 수 있습니다. 특히 당신을 위해 : 귀하의 의견부터

select date_format(`date`, '%Y-%m-%d')