2010-11-23 4 views
4

필드에 저장된 두 가지 형식의 테이블을 가지고 있는데, 일부는 mm/dd/yy이고 더 최신 항목은 yyyy/mm/dd입니다.MySQL에서 날짜 형식을 업데이 트

나는이

UPDATE table 
    SET date_field = DATE_FORMAT(date_field, '%Y/%m/%d') 
WHERE date_field = DATE_FORMAT(date_field, '%m/%d/%y') 

같은 쿼리를 실행하려면하지만 그냥 작동하지 않습니다. 내가 얻은 한 가지 결과는 단지 % m 데이터를 가져 와서 % Y로 바꾸고 실제로 데이터를 엉망으로 만들고 있다는 것입니다.

의견이 있으십니까?

+1

date_field의 열 유형은 무엇입니까? 만약 날짜 또는 타임 스탬프라면 Ymd를 myd로 재 배열 할 수 없습니다. – Mikhail

답변

13

DATE_FORMAT이 아닌 STR_TO_DATE 함수를 사용하려고합니다. 또한 잘못 형성된 날짜 만 업데이트하려는 것으로 가정하므로 다음과 같이하십시오.

UPDATE your_table 
SET date_field = DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) 
WHERE DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) <> '0000-00-00'; 

P.S. 테이블에는 이 포함되며 필드는 포함되지 않습니다. 날짜를 보관하는 문자열 유형을 사용해서는 안되지만 DATE 유형

+0

감사합니다. 그런 다음 나머지 사이트를 곧게 만들 수 있습니다. ASP에서 PHP와 MS SQL을 MySQL로 전환했습니다! 그것이 아직도 서있는 것은 훌륭하다! 하아! –

4

STR_TO_DATE을 사용하여 잘못된 문자열을 먼저 실제 날짜 개체로 변환 한 다음 DATE_FORMAT을 사용하여 원하는 형식의 문자열로 되돌립니다.

또한 WHERE 상태는 이와 같이 작동하지 않습니다. LIKE을 사용하여 잘못된 형식의 문자열을 찾아야합니다.

UPDATE your_table SET date_field = 
    DATE_FORMAT(STR_TO_DATE(date_field, '%m/%d/%y'), '%Y/%m/%d') 
WHERE date_field LIKE '__/__/____' 
+0

감사합니다. 작동했습니다. –

1

생각 하시겠습니까? 아 그래, 실제로 세 :

  • 바퀴를 재발견하지 않습니다. 예, 그렇습니다. 100 만 명의 사람들이 의도 한 것 (풍자적 인 의도는 없습니다)을 처음부터 만들려고 시도하고 있지만, MySQL은 훌륭하고, 효율적이며 사용 가능한 DATE 형식을 사용하고 있습니다. 입/출력에서만 형식화를 수행하십시오. 이를 통해 이러한 종류의 데이터 (날짜 자체)와 프레젠테이션 (날짜 형식)이 혼합되는 것을 방지 할 수 있습니다. 일반적인 경우, 이미 변환에서 변환되지 않은 Y/m/d를 말할 바보 - 증거 방법은 없습니다 - 데이터에 관해서는

  • , 알려진-좋은 백업 (? 당신이 바로, 백업이) 복원 m/d/y이고 실제적인 목적을 위해 날짜는 f *** ed입니다. (특히 2010 년이 아님 - 예 : 08/10/09은 여러 개의 유효한 날짜를 의미 할 수 있음).

  • 또한 날짜의 2 자리 만 저장하면 어떤 아이디어입니까? 그것은 정확히 Y2K였던 시간과 돈을 낭비하게 한 근시안적인 페니 - 꼬집음의 종류입니다. (당신이 날짜를 저장한다면 피한다, y'know, 날짜 형식으로).

관련 문제