Jak sprawdzić, czy kolumna tekstowa SQL Server jest pusta?

Używam SQL Server 2005. Mam tabelę z kolumną tekstową i mam wiele wierszy w tabeli, gdzie wartość tej kolumny nie jest null, ale jest pusta. Próba porównania z " daje tę odpowiedź:

Typy danych text i varchar są niezgodne w operatorze not equal to.

Czy istnieje specjalna funkcja określająca, czy wartość kolumny tekstowej nie jest null, ale pusta?

Author: JustinStolle, 2008-08-29

15 answers

where datalength(mytextfield)=0
 257
Author: Eric Z Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-17 14:54:02
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1
 44
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-03 18:08:21

Właściwie, wystarczy użyć podobnego operatora.

SELECT * FROM mytable WHERE mytextfield LIKE ''
 21
Author: Dane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 06:06:25

Aby uzyskać tylko puste wartości (a nie wartości null):

SELECT * FROM myTable WHERE myColumn = ''

Aby uzyskać zarówno wartości null, jak i empty:

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

Aby uzyskać tylko wartości null:

SELECT * FROM myTable WHERE myColumn IS NULL

Aby uzyskać wartości inne niż null i empty:

SELECT * FROM myTable WHERE myColumn <> ''


I pamiętaj, że używaj podobnych fraz tylko wtedy, gdy jest to konieczne, ponieważ pogorszą one wydajność w porównaniu do innych typów wyszukiwań.

 6
Author: Nima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 06:28:35

Wiem, że ten post jest starożytny, ale uznałem go za przydatny.

Nie rozwiązało to mojego problemu ze zwróceniem rekordu z niepustym polem tekstowym, więc pomyślałem, że dodam swoje rozwiązanie.

To jest klauzula where, która działała dla mnie.

WHERE xyz LIKE CAST('% %' as text)
 2
Author: Mike Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-14 07:49:43

Możesz zrobić jak

SELECT * FROM TABLE WHERE FIELDNAME=''
 2
Author: Liton Uddin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-21 15:26:12

Testowałbym na SUBSTRING (textColumn, 0, 1)

 1
Author: bdukes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-28 21:11:00

Użyj operatora IS NULL:

Select * from tb_Employee where ename is null
 1
Author: Pearl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 10:49:48
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
 1
Author: Enrique Garcia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 22:39:53

Czy null i pusty łańcuch są równoważne? Jeśli tak, to włączę logikę w mojej aplikacji (a może WYZWALACZ, jeśli aplikacja jest "out-of-the-box"?) wymusić, aby pole było albo null, albo", ale nie inne. Jeśli wybrałeś", możesz również ustawić kolumnę na NOT NULL. Chodzi o czystość danych.

 0
Author: Tyler Gooch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 20:03:04

Chciałem mieć predefiniowany tekst ("No Labs Available") do wyświetlenia, jeśli wartość jest null lub empty i mój przyjaciel pomógł mi w tym:

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
 0
Author: Yoosaf Abdulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-07 19:50:03

Musisz zrobić jedno i drugie:

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

 0
Author: marklark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 23:11:46

Wiem, że istnieje wiele odpowiedzi z alternatywami dla tego problemu, ale chciałbym po prostu połączyć to, co znalazłem jako najlepsze rozwiązanie przez @ Eric Z Beard & @ Tim Cooper z @ Enrique Garcia & @uli Köhler.

Jeśli jest to konieczne, aby poradzić sobie z faktem, że spacja może być taka sama jak pusta w Twoim przypadku użycia, ponieważ poniższe zapytanie zwróci 1, a nie 0.

SELECT datalength(' ')

Dlatego wybrałbym coś w stylu:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
 0
Author: Leo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 10:09:12

Użycie DATALENGTH metoda, na przykład:

SELECT length = DATALENGTH(myField)
FROM myTABLE
 0
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-27 20:15:21

Spróbuj tego:

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

I hope help u!

 0
Author: Luiz F C Leite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-10 12:47:16