2013-09-05 7 views
1

나는 3 개월의 기간을 나중에 검색해야하기 때문에 str_to_date 함수를 사용하여 컬럼 이름 timeposted (일부 데이터는 어제와 오늘 같은 단어가 있기 때문에 varchar) 중 하나를 변환하려고 시도하지만 어떻게 든 모든 연도를 시간대별로 볼 때 2020 년으로 변경되었습니다. 변환은 변환 후 2020년 9월 3일 MySQL : str_to_date 올해 위로 엉망진창

  • 31-09-2011가 31-03-2020
  • 내 SQL하게 될

    1. 2005년 9월 3일 후 : 예

      :

      select str_to_date(REPLACE(LEFT(timeposted, LOCATE(' ', timeposted)), ',', ''), '%d-%m-%y') from post 
      

      나는 DATE_FORMAT를 시도했지만 여전히 동일한 문제가 있습니다. 연도가 변경되지 않도록이 문제에 대한 해결 방법이 있습니까?

      편집 : 교체가 timeposted에서 발견 된 날짜가 "31-02-2010, 오후 4시 25분"

      감사합니다,있는 그대로 ','제거하기 위해 사용하는 것입니다 키스

    +1

    은 무엇에 대한 'REPLACE (LEFT (...))'물건? – Barmar

    +0

    지금 열의 내용을 보여줄 수 있습니까? 코드가 MySQL의 일을하고 있거나 같은 열의 다른 문자를 사용하고있는 것처럼 보입니다. – Cfreak

    +0

    'str_to_date ('31 -02-2010, 04:25 PM ','% d- % m- % Y ')' 저에게'2010-02-31'을 주셨습니다. ** 정확한 ** ** 쿼리가 사용하고있는 것을 보여주십시오. –

    답변

    2

    즉각적인 문제는 STR_TO_DATE()에서 사용한 잘못된 형식 문자열로 인해 발생합니다. 대신

    '%d-%m-%y' 
         ^^ 
    

    사용

    '%d-%m-%Y' 
    

    여기 MarcB 이미이 모든 문자열 조작을 필요로하지 않는 주석으로 이제 SQLFiddle


    데모

    입니다. 그냥

    SELECT STR_TO_DATE(timeposted, '%d-%m-%Y') timeposted 
        FROM post 
    

    여기에 할 SQLFiddle 데모

    +0

    세기 모드의 "2011"은 2020입니다. – tadman

    +0

    안녕하세요, 내 실수를 지적 해 주셔서 감사합니다. – user2584537