![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Stored Procedure: Wie varchar iterieren?
Ich möchte in einer Stored Procedure über eine varchar-Variable iterieren und auf jeden Buchstaben zugreifen können um bestimmte Buchstaben durch etwas zu ersetzen. Im Pseudocode soll das so aussehen:
Code:
CREATE Procedure GetFoo(myString varchar(10))
RETURNS (myreturn varchar(10)) BEGIN myreturn := ''; for i := 1 to length(myString) do if myString[i] = 'A' myreturn := myreturn + 'X' else if myString[i] = 'A' myreturn := myreturn + 'Y' else myreturn := myreturn + myString[i]; END |
AW: Stored Procedure: Wie varchar iterieren?
Auf die Gefahr hin, dass es nicht das richtige ist. Hast Du zufällig den vorigen Thread gesehen?
![]() |
AW: Stored Procedure: Wie varchar iterieren?
variante 1: nutze die replace funktion
![]() Variante 2: so was in der Art mit substring
Code:
Wichtiger Hinweis noch: O.a. Verfahren nicht mit BLOB Variablen machen , siehe
create procedure repl
(val varchar(10)) returns (res varchar(10)) as declare variable c char(1); begin res=''; while (char_length(val)>0) do begin c=substring(val from 1 for 1); val=substring(val from 2 for 10); if (c='A') then c='1'; else if (c='C') then c='3'; res=res||c; end suspend; end select repl.res from repl('ABCDEFGHIJ'); ![]() |
AW: Stored Procedure: Wie varchar iterieren?
@IBExpert: Danke das klappt.
Jetzt habe ich nur das Problem, dass ich beim String-Vergleich if (c='A') then zwischen Groß- und Kleinschreibung unterscheiden muss. c='a' und c='A' sollen also unterschiedlich behandelt werden. Momentan wird ist die Schreibweise aber egal. |
AW: Stored Procedure: Wie varchar iterieren?
dann nimm doch einfach upper() oder lower()
|
AW: Stored Procedure: Wie varchar iterieren?
Zitat:
|
AW: Stored Procedure: Wie varchar iterieren?
bei mir wir ein kleines a nicht ersetzt, weil 'a'<>'A' ist
habe das gerade mit einer fb25 und einer fb3 DB getestet |
AW: Stored Procedure: Wie varchar iterieren?
Zitat:
select repl.res from repl('abc'); -> 1b3 select repl.res from repl('ABC'); -> 1B3 aufgerufen. Was könnte dafür verantwortlich sein? Spielt da irgendwie eine Zeichensatz/String/Sortier-Defintion mit rein? In meiner DB nutze ich UTF8 / UNICODE_CI_AI in allen VarChar-Feldern. Dabei ist dann ja auch die Schreibweise egal. Aber das dürfte ja in keiner Verbindung zu der StoredProcedure stehen?! Oder gibt es da eine globale DB-Einstellung? |
AW: Stored Procedure: Wie varchar iterieren?
Das CI in UNICODE_CI_AI steht IMHO für Case Insensitive.
Also könnte das schon das Problem sein. Frank |
AW: Stored Procedure: Wie varchar iterieren?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz