Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> IMPORT daty
czezz
post 10.12.2003, 16:07:39
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 0
Dołączył: 24.07.2003

Ostrzeżenie: (10%)
X----


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?
:?
Go to the top of the page
+Quote Post
kicaj
post 10.12.2003, 16:36:08
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


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!


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
#sigsegv
post 10.12.2003, 21:41:28
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
czezz
post 11.12.2003, 08:32:11
Post #4





Grupa: Zarejestrowani
Postów: 141
Pomógł: 0
Dołączył: 24.07.2003

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
scanner
post 11.12.2003, 08:46:11
Post #5





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




[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]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
czezz
post 11.12.2003, 09:13:03
Post #6





Grupa: Zarejestrowani
Postów: 141
Pomógł: 0
Dołączył: 24.07.2003

Ostrzeżenie: (10%)
X----


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 ?
Go to the top of the page
+Quote Post
scanner
post 11.12.2003, 10:45:18
Post #7





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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]


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
czezz
post 11.12.2003, 11:09:10
Post #8





Grupa: Zarejestrowani
Postów: 141
Pomógł: 0
Dołączył: 24.07.2003

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
scanner
post 11.12.2003, 11:23:29
Post #9





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
#sigsegv
post 11.12.2003, 18:59:47
Post #10





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
scanner
post 11.12.2003, 19:58:03
Post #11





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 10:06