Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen (https://www.delphipraxis.net/182144-sql-wenn-leeres-tabellenfeld-dann-defaultwert-zuweisen.html)

juergen 3. Okt 2014 20:53

Datenbank: Pervasive • Version: 11.3 • Zugriff über: PDAC

SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Hallo zusammen,

über eine Query hole ich mir Werte aus verschiedenen Tabellen in ein Quantumgrid.
Jetzt hat eine Tabelle in einer Spalte Euro-Werte als String mit Punkt als Dezimaltrenner gespeichert! :wall: Da kann ich leider nichts ändern.
Nun möchte ich die Werte trotzdem als Currency-Werte im Qunatumgrid speichern. Das klappt auch, wenn ich in der SQL-Abfrage folgendes anwende:

Code:
Convert(Replace(LTrim(A.Eurowert),'.', ','), SQL_CHAR)
Nun gibt es aber auch noch leere Felder...
Ich hatte gehofft dass ich mit SQL_DECIMAL oder SQL_NUMMERIC oder SQL_REAL das Ganze so konvertiert bekomme, dass immer eine Zahl raus kommt (auch bei leeren Feldern), aber da bekomme ich einen SQL-Fehler! Anscheinend kann die DB diese Abfrage so nicht anwenden.


Kennt jemand eine Möglichkeit im SQL-Statement einem leeren Feld ein Defaultwert zuzuweisen (in meinem Fall => 0,00)?

Vielen Dank schon mal vorab!

mkinzler 3. Okt 2014 21:01

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Versuch es mal mit

SQL-Code:
case when A.Eurowert is null then 0 else Convert(Replace(LTrim(A.Eurowert),'.', ','), SQL_CHAR) end

Sir Rufo 3. Okt 2014 21:05

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Ansonsten gibt es auch noch coalesce

juergen 3. Okt 2014 21:23

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Vielen Dank euch beiden!!!:thumb:
Beides hilft mir weiter!
:dp:

himitsu 3. Okt 2014 22:01

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
COALESCE ist hier natürlich das Mittel der Wahl, aber bezüglich dieser CASE-Dinger ... da gibt es in vielen DBMS auch noch sowas wie IIF/IFTHEN. :stupid:

Sir Rufo 3. Okt 2014 22:52

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Zitat:

Zitat von himitsu (Beitrag 1274768)
COALESCE ist hier natürlich das Mittel der Wahl, aber bezüglich dieser CASE-Dinger ... da gibt es in vielen DBMS auch noch sowas wie IIF/IFTHEN. :stupid:

Oder auch IFNULL ;)

sx2008 4. Okt 2014 00:03

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Und natürlich würde man nicht einen Punkt durch ein Komma ersetzen - das ist doch sehr kurzsichtig.
Nein, man castet natürlich in den Datentyp den das Feld von Anfang an hätte haben sollen:
SQL-Code:
SELECT Cast(A.Eurowert AS DECIMAL(8,2)) AS EurowertNeu, ... FROM ...

Zum Glück enthält das Feld einen Punkt als Dezimaltrenner; bei einem Komma hätte man tatsächlich die Replace-Funktion gebraucht.

himitsu 4. Okt 2014 01:23

AW: SQL: wenn leeres Tabellenfeld dann Defaultwert zuweisen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1274771)
Oder auch IFNULL ;)

Nicht zu verwechseln mit NULLIF :stupid:

Nja, anhand der Fragestellung wird das auch irgendwie klar.
* wenn Leer, dann nimm das Andere -> COALESCE/IFNULL
* wenn dies und das, dann nimm das, ansonsten jenes IFTHEN/IIF, bzw. IF-THEN-ELSE oder das lange CASE, was eigentlich eher für mehr als 2 geeignet ist.


Das "Zuweisen" war eh falsch, da du doch nirgendwo was zuweisen tust (zumindestens nicht im gezeigten Code), sondern du willst auslesen/verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:56 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