Frage

Ich verwende SQL Server 2005.Ich habe eine Tabelle mit einer Textspalte und viele Zeilen in der Tabelle, in denen der Wert dieser Spalte nicht null, aber leer ist.Der Vergleich mit '' ergibt folgende Antwort:

Die Datentypen text und varchar sind im Ungleich-Operator nicht kompatibel.

Gibt es eine spezielle Funktion, um festzustellen, ob der Wert einer Textspalte nicht null, sondern leer ist?

War es hilfreich?

Lösung

where datalength(mytextfield)=0

Andere Tipps

ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

Eigentlich müssen Sie nur den LIKE-Operator verwenden.

SELECT * FROM mytable WHERE mytextfield LIKE ''

So erhalten Sie nur leere Werte (und keine Nullwerte):

SELECT * FROM myTable WHERE myColumn = ''

So erhalten Sie sowohl Null- als auch leere Werte:

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''

So erhalten Sie nur Nullwerte:

SELECT * FROM myTable WHERE myColumn IS NULL

So erhalten Sie andere Werte als null und leer:

SELECT * FROM myTable WHERE myColumn <> ''


Und denken Sie daran, LIKE-Phrasen nur bei Bedarf zu verwenden, da diese die Leistung im Vergleich zu anderen Suchtypen beeinträchtigen.

Ich weiß, dass dieser Beitrag uralt ist, aber ich fand ihn nützlich.

Mein Problem, den Datensatz mit einem nicht leeren Textfeld zurückzugeben, wurde dadurch nicht gelöst, also dachte ich, ich würde meine Lösung hinzufügen.

Dies ist die where-Klausel, die für mich funktioniert hat.

WHERE xyz LIKE CAST('% %' as text)

Verwenden DATENLÄNGE Methode, zum Beispiel:

SELECT length = DATALENGTH(myField)
FROM myTABLE

Ich würde dagegen testen SUBSTRING(textColumn, 0, 1)

Sind Null und eine leere Zeichenfolge gleichwertig?Wenn dies der Fall ist, würde ich Logik in meine Anwendung einbinden (oder vielleicht einen Auslöser, wenn die App „out-of-the-box“ ist?), um zu erzwingen, dass das Feld entweder null oder '' ist, aber nicht das andere.Wenn Sie '' gewählt haben, können Sie die Spalte auch auf NOT NULL setzen.Nur eine Sache der Datensauberkeit.

Ich wollte einen vordefinierten Text („Keine Labore verfügbar“) haben, der angezeigt wird, wenn der Wert null oder leer ist, und mein Freund hat mir dabei geholfen:

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0)
                            THEN cast((S.UnitsOrdered) as varchar(50))
                    ELSE 'No Labs Available'
                    END

Sie müssen beides tun:

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''

Verwenden Sie den IS NULL-Operator:

Select * from tb_Employee where ename is null

Ich weiß, dass es viele Antworten mit Alternativen zu diesem Problem gibt, aber ich möchte nur die meiner Meinung nach beste Lösung von @Eric Z Beard und @Tim Cooper mit @Enrique Garcia und @Uli Köhler zusammenstellen.

Bei Bedarf müssen Sie sich mit der Tatsache auseinandersetzen, dass „nur Leerzeichen“ in Ihrem Anwendungsszenario dasselbe wie „leer“ sein könnte, da die folgende Abfrage 1 und nicht 0 zurückgibt.

SELECT datalength(' ')

Daher würde ich mich für etwas entscheiden wie:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

Versuche dies:

select * from mytable where convert(varchar, mycolumn) = ''

Ich hoffe, ich helfe dir!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top