Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Formatowanie liczb calkowitych
one_eddie
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 23.05.2003
Skąd: Polska

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


Czy jest jakis sposob aby zamienic dana typu 1 na 00001 oraz dana typu 101 na 00101 chodzi o dzialanie identyczne jakie daje funkcja z jezyka C (printf( "%05d", 1 ) // == 00001)

Szukalem na mysql.com ale jedyne co znalazlem to FORMAT ale on nie dziala tak jak bym tego oczekiwal.

Jest jakis sposob aby wymusic takei formatowanie?

// edit
Chyba mi sie udalo wkoncu wpadlem na pomysl jak to zrobic jesli ktos ma lepszy sposob chetnie go zobacze:

  1. SELECT concat(mid('0000000',1,8-length(id)),id)
  2. FROM TABLE;

Kod
+------------------------------------------+
| concat(mid('0000000',1,8-length(id)),id) |
+------------------------------------------+
| 00000006                                 |
| 00000007                                 |
| 00000008                                 |
+------------------------------------------+


Ten post edytował one_eddie 28.07.2005, 15:11:06
Go to the top of the page
+Quote Post
kszychu
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


A nie wygodniej ustawiś dla danego pola odpowiednią długość i dać zerofill?
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A nie wygodniej ustawiś dla danego pola odpowiednią długość i dać zerofill?
Jeśli by chodzilo tylko o wyswietlanie wyników to to rozwiązanie jest super. Sęk w tym, że późniejsze operację na ID, które nie są liczbami a stringiem 0000003 może powodowac pewne kłopoty, na które ja się natknąłem i przeklinam dzień, w którym przez przypadek wcisnąłem zerofill na polu. Nie polecam do poważniejszych zastosowań. Naprawdę moze wprowadzić trochę niepotrzebnej babraniny.
Go to the top of the page
+Quote Post
mhs
post
Post #4





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


Cytat(nospor @ 2005-07-28 16:24:57)
Cytat
A nie wygodniej ustawiś dla danego pola odpowiednią długość i dać zerofill?
Jeśli by chodzilo tylko o wyswietlanie wyników to to rozwiązanie jest super. Sęk w tym, że późniejsze operację na ID, które nie są liczbami a stringiem 0000003 może powodowac pewne kłopoty, na które ja się natknąłem i przeklinam dzień, w którym przez przypadek wcisnąłem zerofill na polu. Nie polecam do poważniejszych zastosowań. Naprawdę moze wprowadzić trochę niepotrzebnej babraniny.

no tak, ale chyba nie mowimy tutaj o zastosowaniu zero fill dla klucza glownego tabeli..., prawda?

Ten post edytował mhs 28.07.2005, 15:27:59
Go to the top of the page
+Quote Post
kszychu
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Jakiej babraniny? Jak potrzebujesz integera to robisz zwqyczajne (int)$zmienna i po kłopocie.
Inna sprawa, że ja bym to w ogóle formatował już po wyciągnięciu z bazy za pomocą sprintf().
Go to the top of the page
+Quote Post
one_eddie
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 23.05.2003
Skąd: Polska

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


Cytat(kszychu @ 2005-07-28 16:28:04)
Jakiej babraniny? Jak potrzebujesz integera to robisz zwqyczajne (int)$zmienna i po kłopocie.
Inna sprawa, że ja bym to w ogóle formatował już po wyciągnięciu z bazy za pomocą sprintf().

W skrypcie dane wprowadzane sa tak ze liczby poprzedzane sa odpowiednia iloscia zer.
Teraz jesli w bazie jest kilka id, np

00001
00101
00110

i uzer poda po kolei 00 ... zobaczy wszystkie poda 000 zobaczy jeden cofnie i poda 001 zobaczy 2 dlatego wlasnie zdecydowalem sie na taki kawalek skryptu. i stad to cale zamieszanie.

  1. "MID(CONCAT( MID( '0000000', 1, 8 - LENGTH( p.Id ) ), p.Id )),0," << (int)strlen( cpszValue ) << ")='" << cpszValue << "')


no i dizeki temu ze sprawdzanie robie na poziomie sql nie musze potem podczas wyswietlanie odrzucac dane i robic niepotzrebnej roboty, poniewaz robi to za mnie sql.

Ten post edytował one_eddie 28.07.2005, 15:33:23
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no tak. Jak od początku jest się nastawionym, że to będzie 0000...., anie liczba to niech będzie, przesadzilem. W moim przyapdku zerofill wcisnelo się w dośc zaawansowanej fazie projektu, na tylko jedenj tabeli. W inncy tabelach klucze obce do tej tabeli mialem normalne. Musialem potem troche kombinować , ze by w pewnych mych zastosowaniach to bylo zgodne. Trudno mi opisac konkretnie problem bo juz nie pamietam. W kazdym bądź razie w środku projektu nie polecam takich zmian.
Go to the top of the page
+Quote Post
one_eddie
post
Post #8





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 23.05.2003
Skąd: Polska

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


Cytat(nospor @ 2005-07-28 16:33:34)
(...)W kazdym bądź razie w środku projektu nie polecam takich zmian.

Faktycznie zero fill bylo by dla mnie wygodniejsze ale pociagnelo by zasoba zmiane lanuhchow formatujacych.

Poki co moje rozwiazanie dziala i nie ma sensu go zmieniac.
Dzieki za pomoc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 14:36