#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть SQL-запрос, подобный этому:
Declare @SuspendedTo varchar(100) = 'Processing,Personal Service'
Select @SuspendedTo
Select top 100 SuspendedTo, *
from #temp_SuspenseResults
where SuspendedTo in (@SuspendedTo)
Проблема с этим запросом заключается в том, что @SuspendedTo
он рассматривается как одна строка, и это не возвращает никаких результатов. Как мне разделить @SuspendedTo
ее так, чтобы я получил следующий запрос:
Select top 100 SuspendedTo, *
from #temp_SuspenseResults
where SuspendedTo in ('Processing', 'Personal Service')
Ответ №1:
Вы можете использовать string_split()
:
Select top 100 SuspendedTo, sr.*
from #temp_SuspenseResults sr
where sr.SuspendedTo in (select value from string_split(@SuspendedTo, ','))
Ответ №2:
Попробуйте это:
Declare @SuspendedTo varchar(100) = 'Processing,Personal Service'
Select @SuspendedTo
Select top 100 SuspendedTo, *
from #temp_SuspenseResults
OUTER APPLY STRING_SPLIT(@SuspendedTo,',') s
where SuspendedTo in (s.value)
Также мы можем добиться того же, используя узлы XML
Declare @SuspendedTo varchar(100) = 'Processing,Personal Service'
DECLARE @SuspendedToXML XML=cast('<r>' replace(@SuspendedTo, ',', '</r><r>') '</r>' as xml)
Select top 100 SuspendedTo, *
from #temp_SuspenseResults
INNER JOIN (
SELECT r.value('.', 'varchar(50)') Location_id
FROM @SuspendedToXML.nodes('r') AS fn(r)
) AS X ON X.Location_id =SuspendedTo