czezz
10.12.2003, 16:07:39
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

?
:?
kicaj
10.12.2003, 16:36:08
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
10.12.2003, 21:41:28
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
11.12.2003, 08:32:11
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
11.12.2003, 08:46:11
[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
11.12.2003, 09:13:03
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
11.12.2003, 10:45:18
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
11.12.2003, 11:09:10
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
11.12.2003, 11:23:29
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
11.12.2003, 18:59:47
Cytat
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
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
11.12.2003, 19:58:03
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.