Я пытаюсь удалить возможность пробелов по значению, которого нет в базе данных при создании представления для моего поиска. У меня проблема в том, что мой оператор CASE работает не совсем правильно, когда я пытаюсь проверить NULL или пустое значение. Кажется, это работает для тех, которые являются нулевыми, но бланку, кажется, не так много везения. В этом случае я пытаюсь проверить наличие нулевого или пустого значения importantField

CREATE VIEW Lookup4 AS
SELECT TOP 140000 CONCAT(no,
    CASE WHEN (importantField is null OR importantField  = '') 
        THEN '' ELSE ' ' + importantField END, 
            fieldname + ' ', anotherField2)  AS UNRELATEDFIELD, Code, 
    CASE NAME
        WHEN '101,,,,,' THEN 'value1e'
        WHEN '14,,,,,' THEN 'value3'
        WHEN '16,,,,,' THEN 'value4'
    END AS NAME
FROM  dbo.Lookup
2
Alex 1 Сен 2017 в 11:44

5 ответов

Лучший ответ

Это то, что вы после

CREATE VIEW Lookup4 AS
SELECT TOP 140000 CONCAT(no,
    CASE WHEN (ISNULL(importantField,'') = '') 
        THEN '' ELSE ' ' + importantField END, 
            fieldname + ' ', anotherField2)  AS UNRELATEDFIELD, Code, 
    CASE NAME
        WHEN '101,,,,,' THEN 'value1e'
        WHEN '14,,,,,' THEN 'value3'
        WHEN '16,,,,,' THEN 'value4'
    END AS NAME
FROM  dbo.Lookup
1
Mr Slim 1 Сен 2017 в 08:56

Если вы хотите проверять только на null, а не на пустые строки, вы также можете использовать ifnull, как вы пытались. Но это не подходит и для пустых строк.

 SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 
    from tablename
0
hitesh panwar 1 Сен 2017 в 08:53

Попробуйте изменить:

importantField is null

С участием

IsNull(importantField)
0
TeoVr81 1 Сен 2017 в 08:54
CREATE VIEW Lookup4 AS
SELECT TOP 140000 CONCAT(no,ifnull(importantField,'')<>'', 
            fieldname + ' ', anotherField2)  AS UNRELATEDFIELD, Code, 
    CASE NAME
        WHEN '101,,,,,' THEN 'value1e'
        WHEN '14,,,,,' THEN 'value3'
        WHEN '16,,,,,' THEN 'value4'
    END AS NAME
FROM  dbo.Lookup
0
Chandrakant Thakkar 1 Сен 2017 в 08:56

Незначительные изменения в соответствии с вашим результатом

Метод 1:

 Select *
    From dbo.Lookup
    Where IsNull(importantField, '') = ''

Метод 2:

 Select *
    From dbo.Lookup
    Where (importantField is NULL or importantField = '')
0
shishir 1 Сен 2017 в 09:47