Как использовать NULL или пустую строку в SQL


129

Я хотел бы знать, как использовать NULL и пустую строку одновременно в WHEREпредложении в SQL Server. Мне нужно найти записи, которые имеют либо нулевые значения, либо пустую строку. Спасибо.


5
В SQL есть ключевое слово OR.
Роберт Харви

13
Этот вопрос не свидетельствует о каких-либо исследовательских усилиях. Важно делать уроки . Расскажите нам, что вы нашли и почему это не соответствует вашим потребностям. Это демонстрирует, что вы нашли время, чтобы попытаться помочь себе, избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и актуальный ответ. FAQ .
Кермит

1
возможный дубликат Как выбрать данные из таблицы MySQL, где столбец имеет значение NULL (это был вопрос MySQL, но в основном это тот же ответ для t-sql)
Майкл Берковски,

Ответы:




25

Если вам это нужно в разделе SELECT, можно использовать вот так.

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct

вы можете заменить на nullсвое замещающее значение.


1
Oracle NVL (var1, 'value') позаботится о замене пустой строки. Isnull (var1, 'value') T-SQL - нет.
Дженна Лиф

15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

2
SELECT * FROM TableName, ГДЕ columnNAme IS NULL ИЛИ RTRIM (columnName) = ''
Ксавьер Джон

2
Как указывает Ксавье, нет необходимости делать ОБА, ltrimи rtrimесли цель - просто сравнить с пустой строкой. ПРИЧИНА: если есть ТОЛЬКО пробелы, одна обрезка удалит их все. Например, вам все равно, будет ли сравнение неудачным, потому что остается «abc» или «abc».
ToolmakerSteve,

8

Чтобы найти строки, где col NULL, пустая строка или пробел (пробелы, табуляции):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

Чтобы найти строки, где col NOT NULL, пустая строка или пробел (пробелы, табуляции):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''

7

Некоторые разумные методы ...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

И некоторые несрочные ...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';


3

мое лучшее решение:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE возвращает первое ненулевое выражение в списке выражений ().

если fieldValue является нулем или пустой строкой, тогда: мы вернем второй элемент, затем 0.

поэтому 0 равен 0, тогда это fieldValue является пустой или пустой строкой.

в Python, например:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

удачи


2

youe check null With IS NULL и string Empty With LEN (RTRIM (LTRIM (Column))) = 0 in

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL



1

Вы можете использовать isnullфункцию для получения как nullпустых значений текстового поля:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

Функция isnull буквально проверяет, является ли значение нулевым. Это не сработает, если строка пуста ("").
Макс Прингл

@ Макс Прингл. Я не утверждаю иначе. Также предоставленный код относится к запросу вопроса. Не уверен в вашем вкладе. Предложите правку вместо голосования против.
Альберто Де Каро

приму ваш совет. Сейчас я внесла предлагаемую правку. Здесь предложение where получает только нулевые значения, а не значения пустой строки. Для получения пустых значений можно использовать nullif.
Макс Прингл

1
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

Вы можете проверить ''as NULL, преобразовав его в NULLusingNULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

или вы можете изучить NULLкак ''использующийSELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T


1

с помощью этой функции:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

и используйте это:

dbo.isnull (значение 0)


1
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.