2016-10-14 1 views
0

У меня есть varchar значений, разделенных запятой. Я пытаюсь проверить, находится ли значение в списке, разделенном запятыми.IN только соответствует первому значению при использовании STRING_SPLIT

Например, если varchar является «AAA, BBB, CCC», проверка на «BBB» должна возвращать значение true.

Я использую STRING_SPLIT разобрать запятые список разделенных, но совпадающий только работает, как я ожидал от первого значения:

DECLARE @List VARCHAR(100) = 'AAA, BBB, CCC' 

SELECT 
CASE  
    WHEN 'AAA' IN (SELECT VALUE FROM STRING_SPLIT(@List, ',')) THEN 'true' 
    ELSE 'false' 
END 
--selects true 


SELECT 
CASE  
    WHEN 'BBB' IN (SELECT VALUE FROM STRING_SPLIT(@List, ',')) THEN 'true' 
    ELSE 'false' 
END 
--selects false 

Как вы можете видеть из этого Screenshot, STRING_SPLIT раскалывается все значения как и ожидалось. Почему IN проверяет только первый?

ответ

2

Его, потому что у вас есть Leading пространства в list для каждого элемента, кроме первого пункта.

Использования LTRIM в результате в SPLIT_STRING функции для удаления ведущего пространства

DECLARE @List VARCHAR(100) = 'AAA, BBB, CCC' 

SELECT 
CASE  
    WHEN 'BBB' IN (SELECT LTRIM(VALUE) FROM STRING_SPLIT(@List, ',')) THEN 'true' 
    ELSE 'false' 
END 

Результат:true

+0

Упс. Как обычно, Дьявол находится в деталях. Спасибо вам за помощь. –

1

Там есть место в вашей «BBB», следовательно, вопрос, если вы используете ниже это работает тонну

DECLARE @List VARCHAR(100) = 'AAA, BBB, CCC' 

SELECT VALUE FROM STRING_SPLIT(@List, ',') 

SELECT 
CASE  
    WHEN 'AAA' IN (SELECT VALUE FROM STRING_SPLIT(@List, ',')) THEN 'true' 
    ELSE 'false' 
END 
--selects true 


SELECT 
CASE  
    WHEN ' BBB' IN (SELECT VALUE FROM STRING_SPLIT(@List, ',')) THEN 'true' 
    ELSE 'false' 
END 
+0

Благодарим вас за ответ. Я принял @ Prdp, когда он избил вас до удара, но я очень ценю, что вы нашли время, чтобы предоставить информацию. –

+0

Добро пожаловать ... Цените лучший ответ .. Я тоже думал, что Лрит лучше, посмотрев на это ... –

Смежные вопросы