2013-09-03 16 views
9

czy istnieje funkcja mySQL do konwertowania daty z formatu dd.mm.rr na RRRR-MM-DD?Konwersja formatu daty SQL? [dd.mm.rr do YYYY-MM-DD]

na przykład, 03.09.13 -> 2013-09-03.

+1

Czy Twój wpis jest typem daty, czy jest to ciąg, który jest dosłownie '03.09.13'? –

+0

@ ppeterka66 Tak, a pytanie tutaj prawdopodobnie oznacza, że ​​nie znalazłem/zrozumiałem na to odpowiedzi. – user2216190

+0

@EdGibbs to ciąg znaków. – user2216190

Odpowiedz

29

Od swoim wejściu jest ciąg w postaci 03.09.13, będę zakładać (od dzisiaj jest 03 września 2013), które to dd-mm-rr. można przekonwertować go na bieżąco za pomocą STR_TO_DATE:

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

Następnie można sformatować go z powrotem do łańcucha za pomocą DATE_FORMAT:

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

pamiętać, że rok jest %y (małe litery „y”) w STR_TO_DATE i %Y (wielkie litery "Y") w DATE_FORMAT. Wersja mała jest dla dwucyfrowych lat, a wielka dla czterocyfrowych lat.

+2

DATE_FORMAT (STR_TO_DATE (myVal,'% d.% M.% Y '),'% Y-% m-% d ') Y jest wielka litera –

+0

Rajavel - jest to małe "y" w pierwszym, ponieważ ciąg wejściowy ma 2-cyfrowy rok ('03.09.13'). W drugim jest wielka, więc wynik będzie 4-cyfrowy rok ('2013-09-03'). –

+0

Dzięki za wyjaśnienie mi .. –

4

Zastosowanie

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

Fiddle demo.

Więcej informacji na temat formatów, które można przeczytać w odpowiednim numerze manual page. Wskazówka: jeśli chodzi o wartość konwersji z pola innego niż datetime - zamiast tego lepiej użyć typu danych DATE/DATETIME. Jest to jednak zły pomysł , który działa z datami za pośrednictwem funkcji łańcuchowych. Powyżej znajduje się niezła sztuczka z STR_TO_DATE (nie powtórzy tego kodu, zaktualizowany, aby lepiej pasował)

+0

Nie działa, 'DATE_FORMAT' wymaga, aby data wejścia była w formacie Y-m-d. Twoje zapytanie (jeśli uruchomisz) zwróci "2003-09-13", oczywiście niepoprawne – Lee

+0

Tak, zanotowane (po wysłaniu, niestety) - zaktualizowane. –

+0

Odwróciłem mój głos na przegłosowanie, tylko dlatego, że nie myślałem o tym w ten sposób. Nie jest to coś, co osobiście polecałbym (tak jakbym nie chciał), ale biorąc pod uwagę jego wyjątkowe wymagania, wydaje się, że jest to jedyny sposób na zrobienie tego. – Lee

1

Daty są zapisywane w wewnętrznym formacie. Możesz użyć funkcji date_format(), aby przekonwertować ją na ciąg znaków przy użyciu różnych formatów. Dla waszego w szczególności:

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