"Customowe" sortowanie pola w bazie
pangrubba - 14-12-2006 16:08
"Customowe" sortowanie pola w bazie
"Customowe" sortowanie pola w bazie
Mam pole w tabeli (nazwijmy je "sygnatura"), w którym zapisywane s? dane w formacie: "rok":"liczba"/"liczba", przy czym "liczba" mo?e mie? jeszcze literk? na ko?cu ;) CZyli na przyk?ad takie dane: 1984:2/23 1984:123a/5
Chcia?bym, ?eby te dane sortowa?y si? nie w kolejno?ci alfabetycznej ale liczbowej ("1984:2/23" powinno by? przed "1984:123a/5", a "1984:2/3" przed "1984:2/23").
Mój pomys? na rozwi?zanie problemu jest taki - doda? triggera "after update/insert" na tym polu, który generowa?by warto?ci poprawnie sortowane przez normalne sortowanie alfabetyczne - wstawia?by te warto?ci do nowego pola "sort_order" i potem w zapytaniach w klauzuli ORDER BY korzysta?oby si? z tego sort_order. Zak?adaj?c, ?e "liczba" nie przekracza czterech cyfr to dla warto?ci "1984:123a/5" w polu "sygnatura" wstawialiby?my warto?? "1984:0123a/0005" do pola "sort_order"
My?licie, ?e to dobry pomys??
Jedynym problemem jest dla mnie wyci?gni?cie w triggerze tych cyfr ze ?rodka sygnatury - musz? to zrobi? pod Firebirdem 1.5, ale na pewno da si? to zrobi? przy pomocy jakich? UDF'ów (ewentualnie trzeba b?dzie samemu napisa? udf'a)
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
Grzegorz Danowski - 14-12-2006 16:08
"pangrubba" <pangrubbaWYTNIJTO@poczta.onet.pl> wrote in message news:4d04.000000a9.45716f98@newsgate.onet.pl... > "Customowe" sortowanie pola w bazie > > Mam pole w tabeli (nazwijmy je "sygnatura"), w którym zapisywane s? dane w > formacie: "rok":"liczba"/"liczba", przy czym "liczba" mo?e mie? jeszcze > literk? > na ko?cu ;) CZyli na przyk?ad takie dane: > 1984:2/23 > 1984:123a/5 > > Chcia?bym, ?eby te dane sortowa?y si? nie w kolejno?ci alfabetycznej ale > liczbowej ("1984:2/23" powinno by? przed "1984:123a/5", a "1984:2/3" > przed "1984:2/23"). >
A nie mo?esz zamiast jednego pola u?ywa? trzech (albo nawet pi?ciu, po wy??czeniu symboli literowych do osobnych kolumn)? G.
pangrubba - 14-12-2006 16:09
> A nie mo?esz zamiast jednego pola u?ywa? trzech (albo nawet pi?ciu, po > wy??czeniu symboli literowych do osobnych kolumn)?
Niestety nie. Prawda jest taka, ?e dane pochodz? z papierowych dokumentów i musz? by? z nimi w 100% zgodne, a na papierze czasami s? "?mieci" w ogóle nie pasuj?ce do tego wzorca.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
pangrubba - 14-12-2006 16:09
Dla potomnych:
Stwierdzi?em, ?e nie musz? si? przejmowa? jaki format maj? dane w tym polu. Napisa?em funkcj?, która w przekazanym stringu uzupe?nia wszystkie liczby (ci?gi cyfr) zerami do 4 cyfr. Np. ze stringa "a1-23456.78" robi "a0001-23456.0078"
W tym przypadku wynikowe dane s? ju? poprawnie sortowane.
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
=?ISO-8859-2?Q?=5BORACLE=2C_ORDER_BY=5D_Czy_indeksowane_?==?I SO-8859-2?Q?kolumny_przy=B6piesz=B1_sortowanie=3F?=
=?ISO-8859-2?Q?b=B3=B1d_w_bazie=2C_nie_wiem_od_czego?==?ISO-8859-2?Q?_zaczac_szukanie?=
Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?=
[MySQL] Problem z zapisem danych w bazie danych
[oracle] [xml] XML na bazie istniejacej struktury ?
Jak =?ISO-8859-2?Q?pobra=E6_mo=BFliwe_warto=B6ci_z_pola_?==?ISO-8859-2?Q?typu_ENUM?=
[MySQL] Jaki typ pola aby =?ISO-8859-2?Q?trzyma=E6_liczby_od?==?ISO-8859-2?Q?dzielone_przecinkiem_=3F?=
Problem z funkcja mysql_real_escape_string() na bazie mysql
sql -> tworzenie nowej kolumny z dzielenia 2 innych i sortowanie po niej
zanotowane.pldoc.pisz.plpdf.pisz.plkfia-tek.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|