AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Stored Procedure: Wie varchar iterieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Stored Procedure: Wie varchar iterieren?

Ein Thema von BlueStarHH · begonnen am 12. Dez 2016 · letzter Beitrag vom 18. Dez 2016
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
855 Beiträge
 
Delphi 11 Alexandria
 
#1

Stored Procedure: Wie varchar iterieren?

  Alt 12. Dez 2016, 20:01
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Stored Procedure: Wie varchar iterieren?

  Alt 12. Dez 2016, 21:34
Auf die Gefahr hin, dass es nicht das richtige ist. Hast Du zufällig den vorigen Thread gesehen?
http://www.delphipraxis.net/191132-s...d-mit-sql.html
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Stored Procedure: Wie varchar iterieren?

  Alt 12. Dez 2016, 21:38
variante 1: nutze die replace funktion
http://www.ibexpert.net/ibe/index.php?n=Doc.REPLACE

Variante 2: so was in der Art mit substring

Code:
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');
Wichtiger Hinweis noch: O.a. Verfahren nicht mit BLOB Variablen machen , siehe http://tracker.firebirdsql.org/browse/CORE-5114
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von IBExpert (12. Dez 2016 um 21:50 Uhr)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
855 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Stored Procedure: Wie varchar iterieren?

  Alt 13. Dez 2016, 14:40
@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.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Stored Procedure: Wie varchar iterieren?

  Alt 15. Dez 2016, 22:08
dann nimm doch einfach upper() oder lower()
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
855 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 07:56
dann nimm doch einfach upper() oder lower()
Ich verstehe gerade nicht, wie mir das helfen sollte. Also nochmal zur Verdeutlichung: Ich übergebe ein großes A oder ein kleines a an die StoredProcedure. Innerhalb der StoredProcedure muss ich erkennen können, ob es ein großes oder kleines a ist. Der Verglich c='a' und c='A' liefert aber immer true, egal was der StoredProcedure übergeben wird. upper() oder lower() wären die Lösung, wenn die Schreibweise egal sein soll. Hier möchte ich jedoch die Schreibweise unterscheiden.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 08:41
bei mir wir ein kleines a nicht ersetzt, weil 'a'<>'A' ist
habe das gerade mit einer fb25 und einer fb3 DB getestet
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 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 by Thomas Breitkreuz