• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak prawidłowo wyświetlić kod pocztowy?

Object Storage Arubacloud
0 głosów
4,682 wizyt
pytanie zadane 3 sierpnia 2015 w SQL, bazy danych przez Daniel Nowicjusz (150 p.)
Witam,

W bazie danych mam zapisane kody pocztowe w formacie abcde a chciałbym je wyświetlać w postaci ab-cde. W jaki sposób to zrobić?

2 odpowiedzi

+3 głosów
odpowiedź 3 sierpnia 2015 przez Comandeer Guru (601,890 p.)

SELECT INSERT zadziała prawdopodobnie tylko w MySQL. Żeby pobawić się w bardziej kompatybilny sposób można spróbować pobawić się z cięciem ciągu na podciągi + połączyć przez CONCAT:

SELECT
CONCAT(SUBSTRING(poleZKodem, 1, 2), '-', SUBSTRING(poleZKodem, 3, 5)) AS kod
FROM tabela

Testowane na MySQL i PostgreSQL, ale reszta raczej też powinna łyknąć.

komentarz 4 sierpnia 2015 przez Daniel Nowicjusz (150 p.)
O tak, właśnie o to mi chodziło ;) Dzięki wielkie
komentarz 4 sierpnia 2015 przez Daniel Nowicjusz (150 p.)
Jeszcze jedna sprawa.
Co w przypadku jeżeli w kolumnie znajdują się kody, które mają mniej niż 5 cyfr?
komentarz 4 sierpnia 2015 przez Comandeer Guru (601,890 p.)

Błędu nie wyrzuci, ale string może być dziwnie podzielony. Zawsze można walnąć IF-a, który podzieli stringi równe 5 a resztę zostawi bez zmian:

SELECT
IF(
    CHAR_LENGTH(poleZKodem) = 5,
    CONCAT(SUBSTRING(poleZKodem, 1, 2), '-', SUBSTRING(poleZKodem, 3, 5)),
     poleZKodem
) AS kod
FROM tabela

Z tym, że takie zapytanie zadziała tylko w MySQL. Natomiast wersja działająca i w MySQL i w PostgreSQL wyglądałaby mniej więcej tak:

SELECT
CASE WHEN CHAR_LENGTH(poleZKodem) = 5
    THEN CONCAT(SUBSTRING(poleZKodem, 1, 2), '-', SUBSTRING(poleZKodem, 3, 5))
    ELSE poleZKodem
END  AS kod
FROM tabela

IMO składnia z IF jest bardziej excelowa i przez to czytelniejsza ;)

komentarz 5 sierpnia 2015 przez Daniel Nowicjusz (150 p.)

W MS SQL nie działa ani jedno ani drugie.


SELECT
CASE WHEN LEN(poleZKodem) = 5
    THEN CONCAT(SUBSTRING(Convert(varchar(10),poleZKodem), 1, 2), '-', SUBSTRING(Convert(varchar(10),poleZKodem), 3, 5))
    ELSE poleZKodem
END  AS kod
FROM tabela

Jakieś takie czary wyszukałem na forach, ale też wyrzuca błędy :P

komentarz 5 sierpnia 2015 przez Comandeer Guru (601,890 p.)
Cóż, więc tyle z mitycznego standardu SQL… każde bardziej skomplikowane zapytanie i tak trzeba testować ze swoją bazą, eh
+1 głos
odpowiedź 3 sierpnia 2015 przez misiekmwm Nowicjusz (200 p.)

Może już na poziomie zapytania:

SELECT INSERT(kolumna_z_kodem, 3, 0, '-') FROM tabela_z_kodem

 

 

komentarz 3 sierpnia 2015 przez Comandeer Guru (601,890 p.)
Nie powiem jak bardzo to pokazuje faka standardowi SQL i logice zapytania :D

Podobne pytania

0 głosów
0 odpowiedzi 742 wizyt
–1 głos
2 odpowiedzi 266 wizyt
pytanie zadane 1 czerwca 2020 w SQL, bazy danych przez WiktroH Mądrala (6,550 p.)
0 głosów
1 odpowiedź 697 wizyt

92,592 zapytań

141,441 odpowiedzi

319,702 komentarzy

61,976 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...