Article View: pl.comp.lang.delphi.bazy-danych
Article #82421FIREBIRD - sortowanie pola VARCHAR wg liczb w nim zawartych
From: Leszek
Date: Thu, 27 Nov 2014 12:39
Date: Thu, 27 Nov 2014 12:39
40 lines
2298 bytes
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-mailShow 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