Как вы можете использовать NULLIF в предложении where? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь сделать что-то вроде этого:

select
     col_1, col_2, etc
from
     table
where
     col_1 = nullif('', '')

Я делаю это неправильно? Я не получаю никаких результатов обратно.

Edit:

Мои ожидаемые результаты - вернуть каждую запись, где col_1 равно NULL.

Я знаю, что могу использовать, когда col_1 равно нулю, но я использую SSIS и переменную. Иногда col_1 на самом деле NULL, а иногда нет.

Пример данных:

 collaboration     first_name     last_name          city     
          NULL            Bob         Smith       Chicago
Data Migration           John         Smith        Austin
          NULL           Pika           Chu       Houston
    Production            ash       ketchum         tokyo

Иногда я могу захотеть вернуть записи, в которых сотрудничество равно NULL, иногда я хочу вернуть записи, где написано Production.

Я бы хотел использовать тот же запрос, если это возможно, с небольшими изменениями.

Редактировать часть 2:

Я пытался поэкспериментировать с этим.

select
     col_1, col_2, etc
from
     table
where
     case
         when col_1  = '' then NULL
         else col_1
         end

Но я получаю сообщение об ошибке:

An expression of non-boolean type specified in a context where a condition is expected, near ORDER.

Запрос скорости это не то, что меня беспокоит.

Ответы [ 6 ]

3 голосов
/ 19 марта 2019

Это запрос, который вам нужен

select
     col_1, col_2, etc
from
     table
where
     col_1 is null

is null проверяет, является ли столбец пустым, nullif(@expr1,@expr2) можно переписать как:

case when @expr1 = @expr2 return null else return @expr1 end

РЕДАКТИРОВАТЬ: вы можете расслабитьсяфильтры добавляют условие OR в условие 'where' (СОВЕТ: помните, что AND вычисляется раньше OR)

select
     col_1, col_2, etc
from
     table
where
     (col_1 is null OR col1 like 'production')

, если вы хотите решить, какое время выполнения вам нужно, вы можете написать процедуру:

create proc my_proc @var AS varchar(100) = 'NULL§159§' -- this defaults to null, if you put a parameter it queries with parameter passed
as
select
         col_1, col_2, etc
    from
         table
    where
         WHERE coalesce(col_1,'NULL§159§') = @var 
-- added §159§ symbol to the null to make sure the queried string is impossible in the database, 
-- obviously into the database the value 'NULL159' hase become a sort of 'reserved word', but hopefully is odd enough not to appear in data
GO

и позвоните по номеру exec my_proc('production')

1 голос
/ 19 марта 2019

Попробуйте, это может обрабатывать столбец с нулевыми значениями или пустым пространством

SELECT
     col_1, col_2, etc
FROM
     Table
WHERE
     ISNULL(NULLIF(col_1 ,''),'1') = '1'
0 голосов
/ 19 марта 2019

Попробуйте это.

DECLARE @SearchValue VARCHAR(50)
SELECT col_1, col_2, etc
FROM YourTable
WHERE ISNULL(col_1,'') = ISNULL(@SearchValue,'')
0 голосов
/ 19 марта 2019

Время хрустального шара от меня. Это мое предположение о том, что хочет ОП:

DECLARE @Prod varchar(15);
--SET @Prod = 'Production';

SELECT {Columns}
FROM YourTable
WHERE Col1 = @Prod
   OR (Col1 IS NULL AND @Prod IS NULL);
0 голосов
/ 19 марта 2019
select
     col_1, col_2, etc
from
     table
where
     collaboration IS NULL OR collaboration ='Production'
0 голосов
/ 19 марта 2019

Вы можете сделать что-то вроде

select
     col_1, col_2, etc
from
     table
where
     col_1 IS NULL OR col_1 = ''
...