Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Formatowanie liczb calkowitych
Forum PHP.pl > Forum > Bazy danych > MySQL
one_eddie
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                                 |
+------------------------------------------+
kszychu
A nie wygodniej ustawiś dla danego pola odpowiednią długość i dać zerofill?
nospor
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.
mhs
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?
kszychu
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().
one_eddie
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.
nospor
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.
one_eddie
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.
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.