Seite 1 von 1

Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 13:51
von Manfred
ich habe folgendes Problem, wenn ich diese Abfrage mache

Code: Alles auswählen

select * from tabelle
where empty(feldname)
bekomme ich ein anderes Ergebnis, als wenn ich das hier tippe

Code: Alles auswählen

select * from tabelle
where feldname = ''
select * from tabelle
where feldname = '                                  '
in beiden Ergebnissen ist aber lauf ARCBrowser entprechendes Feld leer. Was kann da drin stehen und wie erkenne/ermittel und entferne es dann?

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 14:01
von nightcrawler
Manfred,
zunächst gibt es einen Unterschied zwischen DBF und ADT - ADT hat neben leer(empty) auch nicht belegt (isnull). Ein '' wird bis nach hinten mit Leerzeichen aufgefüllt. Immer.

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 14:04
von Manfred
Hi Joachim,
es ist ein ADT Tabelle.
Das mit den Leerzeichen habe nicht ganz verstanden. Welche Konsequenzen hat das?

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 14:10
von Marcus Herz

Code: Alles auswählen

select * from tabelle
where ifnull(feldname,'') = ''
Mit Ifnull() kannst du einen Defaultwert für die Abfrage definieren. Ähnlich Coalesce(), siehe Doku
Entspricht:

Code: Alles auswählen

select * from tabelle
where (feldname IS NULL or feldname = '')
Ein = Vergleich mit einem NULL Wert ist immer false.
Im ARC siehst du nicht, ob ein '' oder NULL drinsteht.

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 14:14
von Manfred
das Blöde ist nur,
ich habe mir ein SQL Script mit Platzhalter geschrieben

Code: Alles auswählen

SELECT * FROm tabelle
where feld = '{#wert#}'
Wenn der Platzhalter gegen einen Wert getauscht wird, dann klappt es, aber wenn ich das Feld nur auf leer abfragen will, dann reicht es nicht den Platzhalter dagegen zu tauschen weil auf = '' reagiert das System nicht. Ich bräuchte aber beide Varianten, weil es mal so und mal so sein kann.
Naja, dann muß ich eben mit 2 verschiedenen Scripten arbeiten

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 15:38
von Marcus Herz
deswegen IfNull()

Code: Alles auswählen

SELECT * FROm tabelle
where ifnull(feld,'') = '{#wert#}'
Das sollte doch immer gehen wenn es ein String ist (was ja offensichtlich der Fall ist)

Re: Feldinhalt prüfen/einsehen bei leer

Verfasst: Mo, 07. Nov 2022 15:44
von nightcrawler
Auf jeden Fall würde ich mit Parametern arbeiten ... Stichwort SQL Injection!!!