ravers
Goto Top

SQL-Abfrage - how2do

Hallo liebe Gemeinde,

ich habe da ein kleines Prob mit einer Abfrage (MSSQL2005).

Ich möchte:
SELECT *
FROM DOKUMENT
WHERE (NOT (DICKE = 1)) AND
WHERE (NOT (DICKE = 5))

jedoch gibt er mir hier kein Ergebniss raus, Hinweis Fehler in Nähe von der Where-Klausel.
(Ich möchte ein varchar-Feld in Float ändern, das lässt er jedoch nicht zu. Ich denke das hier NichtZahlen in der Spalte Dicke sind. Evtl. kann man es auch anders lösen?!?!)

How2do???


Thanks4help !

Content-Key: 55924

Url: https://administrator.de/contentid/55924

Printed on: April 19, 2024 at 20:04 o'clock

Member: AndreasHoster
AndreasHoster Apr 05, 2007 at 10:08:36 (UTC)
Goto Top
Daist eindeutig ein Where zuviel:
SELECT *
FROM DOKUMENT
WHERE (NOT (DICKE = 1)) AND (NOT (DICKE = 5))

Und wenn Dicke kein Zahlenfeld ist, dann klappt das so auch nicht. Dann fehlen einfache Anführungszeichen.
Für Ändern gibts cast und convert.
Member: pi314
pi314 Apr 06, 2007 at 10:20:48 (UTC)
Goto Top
es geht auch noch ein bisschen einfacher:

SELECT *
  FROM DOKUMENT
 WHERE dicke NOT IN ( 1, 5 )

greetz,
pi
Member: Biber
Biber Apr 06, 2007 at 11:28:07 (UTC)
Goto Top
Moin Ravers,

Ich möchte ein varchar-Feld in Float ändern, das lässt er jedoch nicht zu.
Ich denke das hier NichtZahlen in der Spalte Dicke sind.

Wenn das so ist, würde ich grundsatzlich über die Sinnhaftigkeit der Tabellenstruktur nachdenken brziehungsweise darüber, wie ich von den Benutzern verwertbare Eingaben erzwingen kann.

Wenn es denn tatsächlich so sein sollte wie beschrieben, dann müsstest Du eigentlich zwei Sachverhalte abprüfen:
1) Ist der Inhalt numerisch?
2) Falls ja, ist es 1 oder 5?

Das würde einem
SELECT *
FROM DOKUMENT
WHERE isNumeric( Dicke)  AND (cast(dicke as float) in (1, 5))
..entsprechen. Das sieht aber nicht nur shice aus, sondern kann auch nur zum gewünschten Ergebnis führen, wenn in dem Feld DICKE nur (von Leerzeichen abgesehen) "1" ode "5" enthalten ist.
Also weder "1.5" noch "5 cm" oder ähnliches.

In diesem Fall kannst Du aber sinnvoller pi314's Statement leicht variiert übernehmen.
SELECT Dokument.*, fltDicke as cast(DICKE as float)
FROM DOKUMENT
WHERE (DICKE in ("1", "5"));  
Ich verschiebe den Beitrag mal von "Entwicklung" nach "Datenbanken".

Gruß
Biber