Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IMPORT daty
Forum PHP.pl > Forum > Bazy danych > MySQL
czezz
mam date w nastepujacym formacie ddmmrr
czyli mam wpisy typu 021103 - 2 listopada 2003.

importuje to jako TEXT ( jesli zaimportuje jako INT to utnie mi wszystkie daty zaczynajace sie na "0" ).

W MySQL'u jest pole DATE od '1000-01-01' do '9999-12-31'
wiec zupelnie nie pasuje do formatu, ktory ja mam. Czy ktos moze mi poradzic jak wyjsc z tej sytuacji questionmark.gif?
:?
kicaj
mozesz je trzymac w bazie w polu DATE lub DATETIME, a przy wyciaganiu z bazy przeksztalcic na wlasny wzor:[php:1:9dd8382de1]<?php
$czas = strtotime($data_baza]); //data wyciagnieta z bazy
$data = date("d.m.Y, H:i:s", $czas); //przeksztalcanie daty na dowolny format
?>[/php:1:9dd8382de1]

Zreszta jakbys poszukal na forum to znajdziesz!! Nastepny raz najpierw poszukaj!
#sigsegv
Jezeli chcesz to wprowadzic do bazy to przeciez nie ma problemu mozesz dodac "20" do stringa, mozesz takze dowolnie wprowadzac dane do bazy i przerabiac na pole DATE w ORACLU jest to funkcja TO_DATE, nie wiem niestety jaka funkcja odpowiada temu w mysql'u
Jezeli chcesz natomiast wyciagac dane w dowolnym formacie to np w ORACLU sluzy do tego funkcja TO_CHAR, w mysql'u odpowiednikiem tej funkcji jest chyba DATE_FORMAT
Jezeli chcesz natomiast dowolnie modyfikowac daty masz interwaly czasowe (INTERVAL)
wszystko jest opisane w:
http://www.mysql.com/doc/en/Date_and_time_..._functions.html

Milej lektury
czezz
najbardziej by mnie interesowalo gdyby udalo sie kazdy wiersz w kolumnie DATA zapisac od tylu. Obecnie jest ddmmrr a gdyby usalo sie zapisac te dane od tylu rrmmdd to by rozwiazalo moj problem.
scanner
[php:1:5415b6c598]<?php
$strOld = '11122003'; // 11 listopad 2003
$strNew = substr( $strOld, 4, 4 ).substr( $strOld, 2, 2 ).substr( $strOld, 0, 2 );
?>[/php:1:5415b6c598]
czezz
zapomnialem dodac, ze musze zrobic to na poziomie bazy danej. Moze istnieje jakas funkcja " reverse() " albo cos podobnego? moze przy imporcie danych da sie to ustawic ?
scanner
Ja bym dopisał do mojej propozycji kilka linijek i zrołbym sobie skrypcik konwertujący właśnie podczas importu.
Nie widzę powodu, dla którego musiałoby to być zrobione na poziomie samej bazy.
No ale jeśłi już się upierasz:[sql:1:ba415e7bbd]ALTER TABLE tabela ADD nowePole TEXT NOT NULL[/sql:1:ba415e7bbd][sql:1:ba415e7bbd]UPDATE tabela SET nowePole = CONCAT('', SUBSTRING(starePole, 5, 4), SUBSTRING(starePole, 3, 2), SUBSTRING(starePole, 1, 2) )[/sql:1:ba415e7bbd][sql:1:ba415e7bbd]ALTER TABLE tabela DROP starePole[/sql:1:ba415e7bbd][sql:1:ba415e7bbd]ALTER TABLE tabela CHANGE nowePole starePole TEXT NOT NULL[/sql:1:ba415e7bbd]
czezz
ok zaraz to wyprobuje a poki co udalo mi sie to zalatwic tym:
[sql:1:dd040d76da]
update test1 set data = date_format(data, '%d%m%y');
[/sql:1:dd040d76da]

Szczerze mowiac nie wiem czemu ale to zadzialalo, ale zmienilo format ddmmyy na yyddmm. Sprawdzam to jeszce wyrywkowo ale wyglada jak narazie ok.
scanner
haha... no tak, pokomplikowąłem trochę. Ale myślałem i czymś innym po drodze, gdzie też trzeba pozamieniać kolejnosc znaków w stringu i to dlatego.
A tu mam finalną wskazówkę dla Ciebie:
http://www.mysql.com/doc/en/Date_and_time_..._functions.html
Cytat
%Y  Year, numeric, 4 digits  
%y  Year, numeric, 2 digits
#sigsegv
Cytat
A tu mam finalną wskazówkę dla Ciebie:
http://www.mysql.com/doc/en/Date_and_time_..._functions.html

Zanim cos napiszesz to poczytaj posty wyzej.

Cytat
<?php  
$strOld = '11122003'; // 11 listopad 2003  
$strNew = substr( $strOld, 4, 4 ).substr( $strOld, 2, 2 ).substr( $strOld, 0, 2 );  
?>

Skoro to forum o Bazach danych to on chyba chce to zrobic na poziomie bazy winksmiley.jpg
Pozatym w kazdej poważnej ksiazce do baz danych jest napisane ze jezeli cos mozna zrobic na poziomie bazy to nalezy to wlasnie tam robic i unikac powielania tych samych mechanizmow we wlasnej aplikacji.
scanner
1. Skoro człowiek importuje dane do bazy, to może dokonac konwersji w trakcie importu, prawda?
2. Czasem, siedząć w pracy, klikam na "odpowiedz", zaczynam pisac, po czym przychodzi ktoś w sprawie służbowej. Więc bądź taki dobry i nie czepiaj się przesunięcia czasowego, ok?
EOT.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.