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
Benutzerbild von IBExpert
IBExpert

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

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
 
#2

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
 
#3

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
BlueStarHH

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

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 08: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 09:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 10: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: Hamburg
855 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 11: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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: Stored Procedure: Wie varchar iterieren?

  Alt 16. Dez 2016, 17:14
Wenn bei den Parametern der Prozedur kein Zeichensatz/COLLATE angegeben ist, wird wohl der Standardzeichensatz der jeweiligen Datenbank verwendet.

http://www.ibexpert.net/ibe_de/index...ardzeichensatz
http://firebirdsql.org/refdocs/langr...procedure.html
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

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

AW: Stored Procedure: Wie varchar iterieren?

  Alt 18. Dez 2016, 08:36
Diese Version trennt Klein- und Großschreibung weil explizite Nutzung collate unicode ohne ci

Code:
create or alter procedure REPL (
    VAL varchar(10))
returns (
    RES varchar(10))
as
declare variable C char(1) character set utf8 collate unicode;
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
Und diese Version unterscheidet das nicht. Wenn die DB mit Default UTF8 Charset
und Default Collation Unicode_ci angelegt wurde, würde das so auch funktionieren,
wenn man keine explizite Angaben dafür aufnimmt. In so einer DB kann man
das dann aber trotzdem wie oben für diesen Zweck überschreiben.

Code:
create or alter procedure REPL (
    VAL varchar(10))
returns (
    RES varchar(10))
as
declare variable C char(1) character set utf8 collate unicode_ci;
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
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 07:08 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