Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Stringverkettung mit NULL-Werten (https://www.delphipraxis.net/178722-stringverkettung-mit-null-werten.html)

süden 23. Jan 2014 10:56

Datenbank: Access / SQL Server • Version: 2005 • Zugriff über: SQL

Stringverkettung mit NULL-Werten
 
Hallo,

wenn ich 2 Felder mit Strings verknüpfen will und ein Wert NULL ist,
ist das gesamte Ergebnis LEER.

Code:
SELECT (  Nachname +', '+ Vorname ) AS name
FROM tAdressen;
Ich habe es dann mit:
Code:
SELECT (  Nachname +', '+ IIf(IsNull(Vorname),'-',Vorname) ) AS name
FROM tAdressen;
Geht auch nicht.

Gibts da noch einen Trick? Im Forum usw. habe ich nichts gefunden.
Ich brauche es für Access und SQL-Server.

DeddyH 23. Jan 2014 11:06

AW: Stringverkettung mit NULL-Werten
 
Das scheint nicht so ganz ohne zu sein: http://stackoverflow.com/questions/7...-and-ms-access

Bernhard Geyer 23. Jan 2014 11:15

AW: Stringverkettung mit NULL-Werten
 
Ich würde hier keine Zeit mit SQL vergeuten und das einfach und simple auf GUI-Ebene zusammenfassen ...

Union 23. Jan 2014 11:33

AW: Stringverkettung mit NULL-Werten
 
Bei access sollte es so gehen:
Code:
SELECT Nachname & ", " & Vorname AS name
FROM tAdressen;
Du solltest Dir auch mal evtl. die access SQL-Funktion nz() anschauen.

bei TSQL geht es mit COALESCE.

himitsu 23. Jan 2014 11:36

AW: Stringverkettung mit NULL-Werten
 
Im Postgre gibt es eine Funktion COALESCE, welche von den enthaltenen Parametern den ersten zurückgibt, der nicht NULL ist.

SQL-Code:
SELECT ( COALESCE(Nachname, '') || ', ' || COALESCE(Vorname, '') ) AS name
FROM tAdressen;
Sowas gibt es bestimmt auch bei deinem DBMS.

süden 23. Jan 2014 11:41

AW: Stringverkettung mit NULL-Werten
 
Es geht darum,
dass ich als Auftrag, bestehende Datenbanken mit bestehenden Programmen, auf Vordermann bringen soll.

Das Programm bietet die Möglichkeit, die Datenbank per Skript zu pflegen (was schon mal gut ist). Es konnen mehrere 100tsd Datensätze sein.

Ich kann also auf GUI-Ebene nichts machen.

süden 23. Jan 2014 11:43

AW: Stringverkettung mit NULL-Werten
 
Code:
SELECT Nachname & ", " & Vorname AS name
FROM tAdressen
bingt nur das Komma!

EarlyBird 23. Jan 2014 11:47

AW: Stringverkettung mit NULL-Werten
 
mit tsql geht einfach:
Delphi-Quellcode:
SELECT (  ISNULL(Nachname; N'') +', '+ ISNULL(Vorname; N'')) AS name
FROM tAdressen;

Sir Rufo 23. Jan 2014 11:49

AW: Stringverkettung mit NULL-Werten
 
Und wenn Nachname und Vorname als Wert NULL haben, dann ist die Ausgabe doch korrekt im Sinne der Daten.

Dann ist auch klar, warum du bei deiner Abfrage gar nichts bekommen hast :roll:
(Macht man das gar nicht mehr, dass man sich vorher die Rohdaten anschaut)

süden 23. Jan 2014 12:17

AW: Stringverkettung mit NULL-Werten
 
Code:
SELECT Nachname & ", " & NZ(Vorname, '--') AS name
FROM tAdressen
oder

Code:
SELECT NZ(Nachname, Nachname) & ", " & NZ(Vorname, '--') AS name
FROM tAdressen
bringt auch kein Ergebnis!

Sir Rufo 23. Jan 2014 12:24

AW: Stringverkettung mit NULL-Werten
 
Was bringt das denn?
SQL-Code:
SELECT
  Nachname,
  Vorname,
  NZ( Nachname, "--" ) & ", " & NZ( Vorname, "--" ) AS name
FROM
  tAdressen

nahpets 23. Jan 2014 13:47

AW: Stringverkettung mit NULL-Werten
 
Bezüglich der Accessdatenbank hätte ich da mal 'ne Frage:

Sind die Spalten Nachname und/oder Vorname leer oder Null?

Habe eine Datenbank hier, in der einige Felder leer sind, aber die Abfrage
SQL-Code:
select * from program where genre is null
kein Ergebnis liefert, aber die Spalte ist in der gesamten Tabelle leer.

Zumindest bei Access scheint es drei Möglichkeiten zu geben:
  1. einen "sichtbaren" Wert
  2. einen "unsichtbaren" Wert
  3. Null
Noch ein paar Beispiele:
Die Spalten genre und lang sind in der gesamten Tabelle leer (in der Anzeige ist kein Wert sichtbar).
SQL-Code:
select '>'&genre &'-'&lang&'<' as Wert from Program where genre is not null and lang is not null
ergibt eine leere Ergebnismenge.
SQL-Code:
select '>'&genre &'-'&lang&'<' as Wert from Program where genre is null and lang is null]
ergibt als Ergebnis >-<. Die leeren Spalten enthalten also auch kein Leerzeichen, sondern einen leeren String, sind aber nicht Null.
Weiß der Geier warum.

Nachdem ich die Spalte genre auf Null gesetzt habe
SQL-Code:
update program set genre = null where station_id = 3334567
funktioniert auch die Abfrage
SQL-Code:
select '>'&genre &'-'&lang&'<' as Wert from Program where genre is null
und liefertz alle Sätze zur station_id 3334567.

Diese beiden Abfragen liefern immer ein Ergebnis:
SQL-Code:
select station_id&', '&genre as Wert from program where genre is not null
SQL-Code:
select station_id&', '&genre as Wert from program where genre is null
station_id ist in der gesamten Tabelle gefüllt, genre ist teils leer, teils Null.
Die station_id wird ausgegeben, unabhängig davon, ob genre nun Null, leer oder gefüllt ist.

Zumindest in Bezug auf Access müsste es demnach bei Deiner Datenbank noch eine andere Konstellation geben.

Wie greifst Du auf die Datenbanken zu? (welche Komponenten?)
Tritt der von Dir beschriebene Effekt nur "mittels Delphi" auf oder auch mit den zu den Datenbank gehörenden Oberflächen?

süden 23. Jan 2014 15:48

AW: Stringverkettung mit NULL-Werten
 
Der Zugriff erfolgt über TADODataSet als auch über die Access-Oberfläche.

Sir Rufo 23. Jan 2014 15:55

AW: Stringverkettung mit NULL-Werten
 
Was wird denn jetzt angezeigt?
Zitat:

Zitat von Sir Rufo (Beitrag 1245040)
Was bringt das denn?
SQL-Code:
SELECT
  Nachname,
  Vorname,
  NZ( Nachname, "--" ) & ", " & NZ( Vorname, "--" ) AS name
FROM
  tAdressen


süden 23. Jan 2014 19:14

AW: Stringverkettung mit NULL-Werten
 
:wall: Ja, so geht's - Danke. :-D 8-):lol:


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