Як перевірити, чи текстовий стовпець SQL Server порожній?


183

Я використовую SQL Server 2005. У мене є таблиця з текстовим стовпцем, і у мене багато рядків у таблиці, де значення цього стовпця не є нульовим, але воно порожнє. Намагаючись порівняти проти ", отримує таку відповідь:

Текст та тип даних даних несумісні з оператором, що не дорівнює.

Чи існує спеціальна функція, яка визначає, чи значення текстового стовпця не є нульовим, а порожнім?


1
Я б перетворив тип даних, якщо можливо, на varchar (max), текст застарілий - найкраще почати вносити зміни зараз, якщо ви торкаєтесь таблиці. Зверніться, звичайно, зі своїм dba. Але чим більше речей можна перетворити до їх перетворення, тим краще моя думка. Це буде залежати від того, скільки коду ви використовуєте в таких речах, як містить, і пишете текст, який буде порушений щодо того, чи потрібно це робити зараз, але я це піднімаю, тож ви знаєте, що це потрібно буде змінити з часом.
HLGEM

Відповіді:


304
where datalength(mytextfield)=0

2
Це не власне питання, а лише зауваження для людей, які читають лише заголовок, не забудьте додати, OR mytextfield IS NULLколи може бути ваша колонкаNULL
Даан

2
mytextfield IS NULL *OR*:-)
заборона-геоінженерія

3
@ ban-geoengineering SQL Server T-SQL не шанує методи оцінки короткого замикання, тому замовлення тут не впливає на результат.
Конрад

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

Наведений вище запит насправді буде обробляти недійсність та характер порожнечі текстового стовпця та відповідно присвоювати значення залежно від умови. Отримайте відповідь, оскільки саме це я шукав. Дякуємо
user_v

28

Насправді вам просто потрібно скористатися оператором LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 Я віддаю перевагу цій відповіді над іншими тут, оскільки вона не покладається на додатковий накладний виклик функцій SQL, таких як DataLength (), IsNull () або Cast (). Можливо, генерований план запитів однаковий (я не перевіряв); все-таки я вважаю це набагато чистішим підходом.
MikeTeeVee

5

Щоб отримати лише порожні значення (а не нульові значення):

SELECT * FROM myTable WHERE myColumn = ''

Щоб отримати і нулі, і порожні значення:

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

Щоб отримати лише нульові значення:

SELECT * FROM myTable WHERE myColumn IS NULL

Щоб отримати інші значення, крім нульових та порожніх:

SELECT * FROM myTable WHERE myColumn <> ''


І пам’ятайте, що використовуйте фрази LIKE лише за необхідності, оскільки вони погіршать ефективність порівняно з іншими типами пошуку.


Ви не маєте на увазі myColumn IS NOT NULL AND my column = '';?
bcsb1001

2

Використовуйте оператор IS NULL:

Select * from tb_Employee where ename is null

1
atoumey в запитанні зазначає, що "значення цього стовпця не є нульовим, але воно порожнє", тому ISNULL () не працює)
GazB

2
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

1
прихильне, але ... де ISNULL (TRIM (поле), '') = '' ще краще ;-), якщо ви відчуваєте, що "" є порожній рядок навіть з пробілами всередині
Кірстен

Для MySQL правильний синтаксис:SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

Я знаю, що ця публікація є давньою, але я вважаю її корисною.

Це не вирішило мою проблему повернення запису із порожнім текстовим полем, тому я подумав, що додаю своє рішення.

Це пункт, де працював для мене.

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



0

Чи еквівалентні нульові та порожні рядки? Якщо вони є, я б включив у свою програму логіку (або, можливо, тригер, якщо додаток "поза коробкою"?), Щоб змусити поле бути нульовим або "", але не іншим. Якщо ви пішли з '', то ви також можете встановити стовпець НЕ НУЛЬНИЙ. Просто річ із чистотою даних.


0

Я хотів, щоб заздалегідь заданий текст ("Немає лабораторій") відображався, якщо значення було нульовим або порожнім, і мій друг мені допоміг у цьому:

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

Я знаю, що існує багато відповідей з альтернативами цієї проблеми, але я просто хотів би зібрати те, що я вважав найкращим рішенням від @Eric Z Beard & @Tim Cooper з @Enrique Garcia & @Uli Köhler.

Якщо потрібно розібратися з тим, що лише у космосі може бути такий же, як порожній у вашому сценарії використання, тому що запит нижче поверне 1, а не 0.

SELECT datalength(' ')

Тому я б хотів щось подібне:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))


0

Замість того, щоб isnullвикористовувати a case, бо ефективність краще.

case when campo is null then '' else campo end

У своєму випуску вам потрібно зробити це:

case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

Код таким:

create table #tabla(
id int,
campo varchar(10)
)

insert into #tabla
values(1,null)

insert into #tabla
values(2,'')

insert into #tabla
values(3,null)

insert into #tabla
values(4,'dato4')

insert into #tabla
values(5,'dato5')

select id, case when campo is null then 'DATA NULL' else
  case when len(campo) = 0 then 'DATA EMPTY' else campo end
end
from #tabla

drop table #tabla

спершу ви перевіряєте, чи є нульовим, потім ви використовуєте функцію len ... я сподіваюся, що це допомагає
Енріке Гарсія

Що робити, якщо стовпець не NULL і порожній, не має тексту?
Сказав Мухаммед Ідрес

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.