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
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

Stored Procedure: Wie varchar iterieren?

  Alt 12. Dez 2016, 19: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, 20: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
646 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Stored Procedure: Wie varchar iterieren?

  Alt 12. Dez 2016, 20: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 20:50 Uhr)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Stored Procedure: Wie varchar iterieren?

  Alt 13. Dez 2016, 13: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
646 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Stored Procedure: Wie varchar iterieren?

  Alt 15. Dez 2016, 21: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: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 06: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
646 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 07: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
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 07:55
bei mir wir ein kleines a nicht ersetzt, weil 'a'<>'A' ist
habe das gerade mit einer fb25 und einer fb3 DB getestet
Ich habe hier fb25 embedded mit einer fb 25 DB mit Deinem IBExpert. Deine "repl" SP von oben nochmal reinkopiert und mit

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?

Geändert von BlueStarHH (16. Dez 2016 um 08:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 09:19
Das CI in UNICODE_CI_AI steht IMHO für Case Insensitive.

Also könnte das schon das Problem sein.

Frank
Frank Reim
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 10:47
Das CI in UNICODE_CI_AI steht IMHO für Case Insensitive.

Also könnte das schon das Problem sein.
Wie genau? In der StoredProcedure oben aus Post #3 wird explizit kein VarChar-Feld benutzt, das UNICODE_CI_AI ist. Ich nutzte die SP genau so, wie in Post #3 genannt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz