spalte werte

Werbung:
Geht es wirklich um die Anzeige? Die Anzeige von Daten dürfte abhängig davon sein, welches Werkzeug man dazu nutzt.
Oder geht esvieleicht um eine Abfrage, die keine leeren Werte (NULL) enthält?
 
Hier alle,

da musst du schon genauer sagen bzw. schreiben was du willst. Es scheint aber so das du dir ein Query basteln musst was zuerst prüft ob in dieser Spalte in irgend einer Zeile der Ergebnismenge ein WERT gesetzt ist. Danach kannst ja erst entscheiden ob diese Spalte ausgegeben wird oder nicht.

Schick doch mal eine Tabelle und das gewünschte Ergebnis als Text (bitte keine Bilder)
 
Also...., TRIM() IST ES NICHT.
Trim schneidet nur Leerzeichen am Anfang bzw End ab. Wenn ein space in der Zelle steht ist sie NICHT LEER.
Oder die Frage war falsch!
 
In der Spalte (column4) gibt es Leerzeichen für rows 2&3 wollte ich das ignorieren. so ich habe column4 IS NOT NULL und TRIM benutzt. ist das richtige ? in der Tat ist es eine ziemlich große Tabelle, die leere Stellen in Spalte 4 hat

column1column2column3column4
1234
22a3b
33a3b
44a4b4c
55a5b5c
66a6b
77a7b
88a8b8c
99a9b9c
 
Zuletzt bearbeitet:
Ich frage mich, was man unter "leere Stellen" verstehen soll...
Eine Stelle mit einem "Leerzeichen" ist bereits gefüllt (nämlich mit einem Leerzeichen)

Der Wert NULL wäre ein absolut nicht vorhandener Wert, nichteinmal ein Leerzeichen ;)

aber auf die schnelle:
Code:
test=# select * from notablegiven;
 column1 | column2 | column3 | column4
---------+---------+---------+---------
       1 | 2       | 3       | 4
       2 | 2a      | 3b      |
       3 | 3a      | 3b      |
(3 Zeilen)

test=# select * from notablegiven where column4 is not null and column4 != ' ';
 column1 | column2 | column3 | column4
---------+---------+---------+---------
       1 | 2       | 3       | 4
(1 Zeile)

EDIT: In der gegebenen Tabelle sind Leerzeichen in den (offenbar) leeren Zellen.
 
für rows 2&3 wollte ich das ignorieren. so ich habe column4 IS NOT NULL und TRIM benutzt. ist das richtige ?
Das mag sein. Deine Frage lässt sich nicht beantworten, weil niemand weiß, was sie bedeuten soll!
"ignorieren" bedeutet: nicht anzeigen? Von was? Den Zeilen 2 & 3? Oder grundsätzlich?
"IS NOT NULL und TRIM benutzt" Das kann man ganz unterschiedlich benutzen. Du könntest es explizit hinschreiben, Dein Statement, dann wäre schon mal an einer Stelle klar, wie die Frage gemeint ist.

.. where trim(column4) is not null
Wäre z.B. eine Möglichkeit es zu nutzen.
Da ein Leerzeichen sowieso niemals sichtbar angezeigt wird, sondern maximal an umgebenden Buchstaben erkennbar wird, ist aber vielleicht die Frage einfach ungeschickt formuliert.
 
Kurzer Einwand : WHERE TRIM(column4) is kein so gute Idee, da dei DB keinen Index auf column4 verwenden kann, denn
die Anweisung lautet "Prüfe das Ergebnis der Funktion TRIM(column4) und somit muss MySQL alle Zeilen lesen, die Funktion ausführen und kann dann erst entscheiden od diese angezeigt wird oder nicht.

Besser ist es die Tabelle zu bereinigen, damit "IS NOT NULL" verwenden kann und somit der Index auch genutzt wird.
 
Kurzer Einwand auf den Einwand von @BerndB : MySQL kann das nicht, andere DB's sogar auf verschiedenen Wegen: als funktionaler Index und als partieller Index:

Code:
privat=*# create table bla(t text);
CREATE TABLE
privat=*# insert into bla select 'x' from generate_series(1,10000000) x;
INSERT 0 10000000
privat=*# insert into bla values ('   ');
INSERT 0 1
privat=*# explain analyse select * from bla where trim(t) = '';
                                                 QUERY PLAN                                                 
-------------------------------------------------------------------------------------------------------------
 Seq Scan on bla  (cost=0.00..134513.92 rows=30089 width=32) (actual time=3967.888..3967.890 rows=1 loops=1)
   Filter: (btrim(t) = ''::text)
   Rows Removed by Filter: 10000000
 Planning time: 2.424 ms
 Execution time: 3968.227 ms
(5 rows)

privat=*# create index idx1 on bla((trim(t)));
CREATE INDEX
privat=*# explain analyse select * from bla where trim(t) = '';
                                                    QUERY PLAN                                                    
-------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on bla  (cost=939.93..48041.70 rows=50000 width=32) (actual time=0.061..0.062 rows=1 loops=1)
   Recheck Cond: (btrim(t) = ''::text)
   Heap Blocks: exact=1
   ->  Bitmap Index Scan on idx1  (cost=0.00..927.43 rows=50000 width=0) (actual time=0.051..0.051 rows=1 loops=1)
         Index Cond: (btrim(t) = ''::text)
 Planning time: 2.110 ms
 Execution time: 0.281 ms
(7 rows)

privat=*# create index idx2 on bla(t) where (trim(t) = '');
CREATE INDEX
privat=*# explain analyse select * from bla where trim(t) = '';
                                                   QUERY PLAN                                                   
-----------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on bla  (cost=16.63..47118.40 rows=50000 width=32) (actual time=0.024..0.025 rows=1 loops=1)
   Recheck Cond: (btrim(t) = ''::text)
   Heap Blocks: exact=1
   ->  Bitmap Index Scan on idx2  (cost=0.00..4.13 rows=50000 width=0) (actual time=0.013..0.013 rows=1 loops=1)
 Planning time: 0.121 ms
 Execution time: 0.059 ms
(6 rows)

Damit geht also die Zeit von ca. 4 Sekunden (39
 
Werbung:
Zurück
Oben