Как проверить, пуст ли текстовый столбец SQL Server?

Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом, и у меня много строк в таблице, где значение этого столбца не равно нулю, но оно пустое. Попытка сравнить с '' дает такой ответ:

The data types text and varchar are incompatible in the not equal to operator.

Есть ли специальная функция, чтобы определить, является ли значение текстового столбца не нулевым, а пустым?

Я бы преобразовал тип данных, если это возможно, в varchar (max), текст устарел - лучше начать вносить изменения сейчас, если вы касаетесь таблицы. Посоветуйтесь, конечно, с вашим dba. Но чем больше вещей можно преобразовать, прежде чем они должны быть преобразованы, тем лучше я думаю. Это будет зависеть от того, сколько у вас кода, использующего такие вещи, как contains и write text, который будет сломан, относительно того, нужно ли это делать сейчас, но я поднимаю его, поэтому вы знаете, что в конечном итоге это нужно будет изменить.

HLGEM 23.06.2010 22:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
191
1
430 736
16
Перейти к ответу Данный вопрос помечен как решенный

Ответы 16

Я бы протестировал против ПОДСТАВКА (textColumn, 0, 1)

Ответ принят как подходящий

where datalength(mytextfield)=0

Это был не настоящий вопрос, а просто замечание для людей, которые читают только заголовок, не забудьте добавить OR mytextfield IS NULL, если ваша колонка может быть NULL

Daan 27.08.2015 12:50

mytextfield IS NULL *OR* :-)

ban-geoengineering 20.11.2016 23:24

@ ban-geoengineering SQL Server T-SQL не поддерживает методы оценки короткого замыкания, поэтому порядок здесь не влияет на результат.

Conrad 03.08.2017 21:01

На самом деле вам просто нужно использовать оператор LIKE.

SELECT * FROM mytable WHERE mytextfield LIKE ''

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

MikeTeeVee 13.11.2019 14:49

Являются ли нуль и пустая строка эквивалентом? Если это так, я бы включил логику в свое приложение (или, может быть, триггер, если приложение "нестандартное"?), Чтобы заставить поле быть либо нулевым, либо '', но не другим. Если вы выбрали '', вы также можете установить для столбца значение NOT NULL. Просто чистота данных.

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

Вышеупомянутый запрос фактически обрабатывает пустоту и пустоту текстового столбца и, соответственно, присваивает значение на основе условия. Проголосуйте за ответ, так как это то, что я искал. Спасибо

user_v 03.02.2012 21:10

Я хотел, чтобы предопределенный текст («Лаборатории недоступны») отображался, если значение было пустым или пустым, и мой друг помог мне с этим:

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

Вау, подзапрос. Это совсем не дорого.

Jay Croghan 26.11.2018 14:28

Я знаю, что этот пост старый, но я нашел его полезным.

Это не решило мою проблему с возвратом записи с непустым текстовым полем, поэтому я подумал, что добавлю свое решение.

Это предложение where, которое сработало для меня.

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

Вы должны сделать и то, и другое:

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

Используйте оператор IS NULL:

Select * from tb_Employee where ename is null

atoumey заявляет в вопросе, что «значение этого столбца не является нулевым, но оно пустое», поэтому ISNULL () не будет работать :)

GazB 20.09.2013 19:32

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

проголосовали за, но ... где ISNULL (TRIM (Field), '') = '' даже лучше ;-), если вы чувствуете, что "" является пустой строкой даже с пробелами внутри

Kirsten 13.06.2019 10:26

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

Cláudio Silva 27.01.2020 13:40

Чтобы получить только пустые значения (а не нулевые значения):

SELECT * FROM myTable WHERE myColumn = ''

Чтобы получить как нулевые, так и пустые значения:

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

Чтобы получить только нулевые значения:

SELECT * FROM myTable WHERE myColumn IS NULL

Чтобы получить значения, отличные от null и empty:

SELECT * FROM myTable WHERE myColumn <> ''


И помните, используйте фразы LIKE только при необходимости, потому что они снизят производительность по сравнению с другими типами поиска.

Вы не имеете в виду myColumn IS NOT NULL AND my column = '';?

bcsb1001 23.08.2014 00:13

Я знаю, что есть много ответов с альтернативами этой проблеме, но я просто хотел бы собрать воедино то, что я нашел как лучшее решение, от @Eric Z Beard и @Tim Cooper с @Enrique Garcia и @Uli Köhler.

Если необходимо иметь дело с тем фактом, что только пробел может быть таким же, как пустой в вашем сценарии использования, потому что приведенный ниже запрос вернет 1, а не 0.

SELECT datalength(' ')

Поэтому я бы выбрал что-то вроде:

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

Используйте метод ДАТАЛЕНТА, например:

SELECT length = DATALENGTH(myField)
FROM myTABLE

попробуй это:

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

я надеюсь помочь тебе!

Вместо использования isnull используйте 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

сначала вы проверяете, является ли значение null, затем вы используете функцию len ... я надеюсь, что это поможет

Enrique Garcia 14.06.2019 16:30

Что делать, если столбец не является NULL и пустым, не имея текста?

Sayed Muhammad Idrees 31.01.2020 20:43

пробелы? или что ты имеешь в виду?

Enrique Garcia 28.09.2020 20:21

DECLARE @temp as nvarchar(20)

SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)

Другие вопросы по теме