🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82421

FIREBIRD - sortowanie pola VARCHAR wg liczb w nim zawartych

#82421
From: Leszek
Date: Thu, 27 Nov 2014 12:39
40 lines
2298 bytes
Witam,
w bazie firebird jest tabela PRG zawierająca pole NR (VARCHAR), w którym przechowuję łańcuchy zawierające m. in. liczby, np. P-124, P-125a, PL-985, G-214, J-235, G-41cd, PL-7, G-1234 itp. Chciałem posortować tabelę wg LICZB występujących w polu NR. Napisałem procedurę DAJLICZBE:

CREATE PROCEDURE DAJLICZBE(
  WEJSCIE VARCHAR(30) CHARACTER SET WIN1250 DEFAULT NULL)
RETURNS(
  LICZBA INTEGER)
AS
DECLARE VARIABLE I SMALLINT;
DECLARE VARIABLE DLUGOSC SMALLINT;
DECLARE VARIABLE ZNAK VARCHAR(1);
DECLARE VARIABLE LICZBASTR VARCHAR(30);
BEGIN

  DLUGOSC = CHAR_LENGTH(WEJSCIE);

  I = 1;
  LICZBASTR = '';
  WHILE (I <= DLUGOSC) DO
  BEGIN
    ZNAK = SUBSTRING(WEJSCIE FROM I FOR 1);
    IF (ZNAK BETWEEN '0' AND '9') THEN LICZBASTR = LICZBASTR || ZNAK;
    I = I + 1;
  END

  IF (LICZBASTR = '') THEN LICZBASTR = '0';
  LICZBA = LICZBASTR;

  SUSPEND;

END;

i tą procedurę wywołuję następująco:

  select * from PRG
  order by (select * from DAJLICZBE(NR))

Działa dokładnie tak, jak chciałem...
Moje pytanie: CZY DA SIĘ TO ZROBIĆ BARDZIEJ POPRAWNIE, a MOŻE PROŚCIEJ LUB PO PROSTU BARDZIEJ ELEGANCKO... (bez UDF)
Dzięki.
Technical Details
Message-ID: <957a2b2f-bf50-47f6-aba1-55cb5371b656@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!h15no8618343igd.0!news-out.google.com!m4ni588qag.1!nntp.google.com!s7no2242253qap.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.50.154.6 with SMTP id vk6mr30793278igb.5.1417091942578;        Thu, 27 Nov 2014 04:39:02 -0800 (PST)
X-Received: by 10.140.19.110 with SMTP id 101mr87944qgg.9.1417091942536; Thu, 27 Nov 2014 04:39:02 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!h15no8618343igd.0!news-out.google.com!m4ni588qag.1!nntp.google.com!s7no2242253qap.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi.bazy-danych
Date: Thu, 27 Nov 2014 04:39:02 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=62.87.184.238; posting-account=RFl58AoAAAA84Pjbomts7IoRoXJVfNhL
NNTP-Posting-Host: 62.87.184.238
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <957a2b2f-bf50-47f6-aba1-55cb5371b656@googlegroups.com>
Subject: FIREBIRD - sortowanie pola VARCHAR wg liczb w nim zawartych
From: Leszek <L.Czudek@gmail.com>
Injection-Date: Thu, 27 Nov 2014 12:39:02 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit