SQL Abfrage mit "ist NULL und nicht NULL aber nicht Leerstring"
max
- datenbank
hi
also ich hab folgendes Problem
Mit folgender Abfrage bekomme ich alles zurückgeliefert was nicht Null und nicht leer ist
SELECT * FROM HitCounter WHERE ([Name] <> '') ORDER BY [PageName],[Name],[Function]
ich will jedoch Felder die Null sind zurückbekommen
ich will nur jene aussortieren die einen leerstring beinhalten
wenn ich jedoch mit
SELECT * FROM HitCounter WHERE ([Name] <> '') AND ([Name] IS NULL) ORDER BY [PageName],[Name],[Function]
abfrage bekomme ich gar nichts mehr zurückgeliefert
weiß jemand wie ich nur auf leerstrings filtern kann, so das diese nicht mehr mitgegeben werden
zusammenfassung:
Ich brauche einen Select befehl für:
Null darf da sein, Nicht null auch, nur ein Leerstring (sprich '') darf nicht dabei sein
schon mal danke im voraus
mfg, max
Hi,
WHERE ([Name] <> '') AND ([Name] IS NULL)
eine Datenzelle kann nur entweder nichts (NULL) oder einen Leerstring beinhalten, nicht aber beides gleichzeitig. Verwechselst Du UND und ODER?
Null darf da sein, Nicht null auch, nur ein Leerstring (sprich '') darf nicht dabei sein
Äh, wenn Dir egal ist, ob der Wert NULL oder nicht ist, dann prüfe einfach nicht danach. Dein DBMS - welches immer das ist - müsste IMHO schon sehr defekt sein, wenn es NULL-Werte ausfiltert, ohne dass Du dies forderst.
Cheatah
Hallo,
WHERE ([Name] <> '') AND ([Name] IS NULL)
Dein DBMS - welches immer das ist - müsste IMHO schon sehr defekt sein, wenn es NULL-Werte ausfiltert, ohne dass Du dies forderst.
Ähm, mit Verlaub, aber dann ist Oracle afaik ziemlich defekt:
CREATE TABLE foo
(
bla NUMBER(2) NOT NULL,
bar VARCHAR2(10)
);
INSERT INTO foo (bla, bar) VALUES(1,'');
INSERT INTO foo (bla, bar) VALUES(3,NULL);
INSERT INTO foo (bla, bar) VALUES(5,'TEST');
SELECT bla, bar
FROM foo
WHERE bar <> ''
liefert immer 0 Datensätze.
SELECT bla, bar
FROM foo
WHERE bar IS NOT NULL
hingegen schon.
Grüße
Klaus
Hi,
Ähm, mit Verlaub, aber dann ist Oracle afaik ziemlich defekt:
CREATE TABLE foo
(
bla NUMBER(2) NOT NULL,
bar VARCHAR2(10)
);
INSERT INTO foo (bla, bar) VALUES(1,'');
INSERT INTO foo (bla, bar) VALUES(3,NULL);
INSERT INTO foo (bla, bar) VALUES(5,'TEST');
SELECT bla, bar
FROM foo
WHERE bar <> ''
liefert immer 0 Datensätze.
Dann ist wirklich was sehr defekt, wenn nicht mal 5, TEST zurückkommt...
SELECT bla, bar
FROM foo
WHERE bar IS NOT NULL
hingegen schon.
hingegen was?
cu,
Andreas
Servus,
WHERE ([Name] <> '') AND ([Name] IS NULL)
Dein DBMS - welches immer das ist - müsste IMHO schon sehr defekt sein, wenn es NULL-Werte ausfiltert, ohne dass Du dies forderst.Ähm, mit Verlaub, aber dann ist Oracle afaik ziemlich defekt:
CREATE TABLE foo
(
bla NUMBER(2) NOT NULL,
bar VARCHAR2(10)
);INSERT INTO foo (bla, bar) VALUES(1,'');
INSERT INTO foo (bla, bar) VALUES(3,NULL);
INSERT INTO foo (bla, bar) VALUES(5,'TEST');SELECT bla, bar
FROM foo
WHERE bar <> ''liefert immer 0 Datensätze.
Seit wann ist Dein DB Server down???
Es wird exakt ein Datensatz geliefert.
Exakt die Anzahl derer die es betroffen hat.
:-)) Tag tägliches überprüfen hat mir diee erkenntis gebracht.
Lies doch mal Oracle for Admin
Das hilft
Gruss Matze
Servus,
Ich sollte wohl das Geheimis auflösen bevor dieser Thread im Archiv verschwindet.
Seit wann ist Dein DB Server down???
Es wird exakt ein Datensatz geliefert.
Exakt die Anzahl derer die es betroffen hat.
Je nachdem was man dem Result set entlockt, kommt eventuell nur
ein Datensatz raus, der besagt: 2 Rows affected.
Das ist das eine was man erfahren kann und in diesem besonderen Beispiel kommen sogar 2 Zeilen dabei raus denn NULL und '' wird von der DB gleich gewertet nämlich als NULL.
Zumindest machen das die gängigsten so.
Gruss Matze
Hallo,
so wirklich richtig verstehe ich Dein Problem nicht und versuche es mal wiederzugeben.
Du möchtest alle Werte bekommen, ausser wenn eine Leerstring '' in einer Spalte ist.
Oracle sagt zu sowas NULL.
Im Klartext das ist NULL. Ein Leerstring wird von Oracle als NULL interpretiert und "filtert" es heraus.
SELECT * FROM HitCounter WHERE ([Name] <> '') ORDER BY [PageName],[Name],[Function]
ich will jedoch Felder die Null sind zurückbekommen
ich will nur jene aussortieren die einen leerstring beinhaltenwenn ich jedoch mit
SELECT * FROM HitCounter WHERE ([Name] <> '') AND ([Name] IS NULL) ORDER BY [PageName],[Name],[Function]
abfrage bekomme ich gar nichts mehr zurückgeliefert
Ganz klar weil Du einmal nach "NULL" als '' und einmal NULL als NULL suchst.
Ich gebe offen zu musste auch grad scharf überlegen ist aber wirklich so.
Gruss Matze
Sorry an alle,
ja ich weiss sollte erst nochmals prüfen und dann abschicken.
so wirklich richtig verstehe ich Dein Problem nicht und versuche es mal
wiederzugeben.
Du möchtest alle Werte bekommen, ausser wenn eine Leerstring '' in einer
Spalte ist.
Oracle sagt zu sowas NULL.
Gerade geprüft,
nicht nur Oracle Sybase und MSSQL verhalten sich gleich.
Was nun mysql daraus macht weiss ich nicht.
Ich vermute jedoch das gleiche.
Im Klartext das ist NULL. Ein Leerstring wird von Oracle als NULL
interpretiert und "filtert" es heraus.
SELECT * FROM HitCounter WHERE ([Name] <> '') ORDER BY
[PageName],[Name],[Function]
Also Du stellst die Bedingung einmal es soll nicht NULL sein.
{[Name] <> ''} und einmal die Bedingung es muss NULL sein.
{([Name] IS NULL}
ganz klar, dass da die DB keine Suchergebniss liefert.
Denn NULL wäre theoretisch in Hexadizmal _ _ und '' ist hexadazimal
ebenfalls _ _ jedoch z.B. eine Leerstelle ' ' wäre Hexadezimal z.B. 2 0 und
das ist bestimmt keine NULL.
Wenn Du nach einer Leerstelle suchst, dann musst du auch eine
<Leerstelle> zwischen '<Leerstelle>' setzen damit es klappt.
Gruss Matze