Я использую SQL Server 2005. У меня есть таблица с текстовым столбцом, и у меня много строк в таблице, где значение этого столбца не равно нулю, но оно пустое. Попытка сравнить с '' дает такой ответ:
The data types text and varchar are incompatible in the not equal to operator.
Есть ли специальная функция, чтобы определить, является ли значение текстового столбца не нулевым, а пустым?





Я бы протестировал против ПОДСТАВКА (textColumn, 0, 1)
where datalength(mytextfield)=0
Это был не настоящий вопрос, а просто замечание для людей, которые читают только заголовок, не забудьте добавить OR mytextfield IS NULL, если ваша колонка может быть NULL
mytextfield IS NULL *OR* :-)
@ ban-geoengineering SQL Server T-SQL не поддерживает методы оценки короткого замыкания, поэтому порядок здесь не влияет на результат.
На самом деле вам просто нужно использовать оператор LIKE.
SELECT * FROM mytable WHERE mytextfield LIKE ''
+1 Я предпочитаю этот ответ остальным здесь, потому что он не полагается на дополнительные накладные расходы на вызов функций SQL, таких как DataLength (), IsNull () или Cast (). Может быть, сгенерированный план запроса такой же (я не проверял); тем не менее, я считаю, что это более чистый подход далеко.
Являются ли нуль и пустая строка эквивалентом? Если это так, я бы включил логику в свое приложение (или, может быть, триггер, если приложение "нестандартное"?), Чтобы заставить поле быть либо нулевым, либо '', но не другим. Если вы выбрали '', вы также можете установить для столбца значение NOT NULL. Просто чистота данных.
ISNULL(
case textcolum1
WHEN '' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
Вышеупомянутый запрос фактически обрабатывает пустоту и пустоту текстового столбца и, соответственно, присваивает значение на основе условия. Проголосуйте за ответ, так как это то, что я искал. Спасибо
Я хотел, чтобы предопределенный текст («Лаборатории недоступны») отображался, если значение было пустым или пустым, и мой друг помог мне с этим:
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
Вау, подзапрос. Это совсем не дорого.
Я знаю, что этот пост старый, но я нашел его полезным.
Это не решило мою проблему с возвратом записи с непустым текстовым полем, поэтому я подумал, что добавлю свое решение.
Это предложение 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 () не будет работать :)
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
проголосовали за, но ... где ISNULL (TRIM (Field), '') = '' даже лучше ;-), если вы чувствуете, что "" является пустой строкой даже с пробелами внутри
Для MySQL правильный синтаксис: SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Чтобы получить только пустые значения (а не нулевые значения):
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 = '';?
Я знаю, что есть много ответов с альтернативами этой проблеме, но я просто хотел бы собрать воедино то, что я нашел как лучшее решение, от @Eric Z Beard и @Tim Cooper с @Enrique Garcia и @Uli Köhler.
Если необходимо иметь дело с тем фактом, что только пробел может быть таким же, как пустой в вашем сценарии использования, потому что приведенный ниже запрос вернет 1, а не 0.
SELECT datalength(' ')
Поэтому я бы выбрал что-то вроде:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
попробуй это:
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 ... я надеюсь, что это поможет
Что делать, если столбец не является NULL и пустым, не имея текста?
пробелы? или что ты имеешь в виду?
DECLARE @temp as nvarchar(20)
SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'
SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
Я бы преобразовал тип данных, если это возможно, в varchar (max), текст устарел - лучше начать вносить изменения сейчас, если вы касаетесь таблицы. Посоветуйтесь, конечно, с вашим dba. Но чем больше вещей можно преобразовать, прежде чем они должны быть преобразованы, тем лучше я думаю. Это будет зависеть от того, сколько у вас кода, использующего такие вещи, как contains и write text, который будет сломан, относительно того, нужно ли это делать сейчас, но я поднимаю его, поэтому вы знаете, что в конечном итоге это нужно будет изменить.