У меня есть этот тип записи:запросов SQL Server В Операторе
Rajkot,Gandhinagar
но я хочу выше запись должна быть изменена, как ниже запись.
'Rajkot','Gandhinagar'
Как я хочу использовать оператор IN для получения результата.
У меня есть этот тип записи:запросов SQL Server В Операторе
Rajkot,Gandhinagar
но я хочу выше запись должна быть изменена, как ниже запись.
'Rajkot','Gandhinagar'
Как я хочу использовать оператор IN для получения результата.
Обратите внимание, что использование соединительной таблицы обычно будет лучше, как указано в комментариях.
Тем не менее, если предположить, что вы застряли с дизайном:
TableA
ID ValueList
1 Uno,Dos,Tres
2 Foo,Bar,Baz,Quux
И вы хотите, чтобы сделать эквивалент этого:
Select *
from TableA a
where @Value in ValueList -- ERROR
Попробуйте это:
Select *
from TableA a
where ','+ValueList+',' like '%,'[email protected]+',%'
Если вы хочу сделать это:
select *
from TableA b
where b.Value in (select ValueList from TableA a where a.ID = b.ID)
Try:
select *
from TableB b
where exists (
select 1 from TableA a
where a.ID = b.ID and ','+a.ValueList+',' like '%,'+b.Value+',%'
)
Замечания по дизайну и производительности: Эта конструкция предотвращает индекс используется на колонке ValueList
. Это не может быть проблемой, если:
TableA очень мал и имеет очень мало строк (например, < 10 строки). Это связано с тем, что если данные вписываются в одну или две страницы, накладные расходы, связанные с поиском индекса, могут быть больше, чем накладные расходы, связанные с простое сканирование страницы и выполнение сравнения строк.
Или на самом деле выполняется поиск только небольшого подмножества строк.
Например, если вы просматриваете отдельные строки по уникальному ключу или несколько десятков строк эффективным индексом и просто хотите фильтровать на основе того, есть ли строка в ValueList
, это может быть быстрее, чем таблицу соединений, поскольку данные хранятся на одной странице.
Другими словами, если вы не поиск значениями из этого списка, а просто фильтрации на них, это может быть не стоит поместить их в таблицу соединения.
Как всегда одна не должен быть догматическим о дизайне, но теста.
Код:
select ''''+substring('Rajkot,Gandhinagar',1,charindex(',','Rajkot,Gandhinagar',0)-1)+'''' + ',' +''''+
substring('Rajkot,Gandhinagar',charindex(',','Rajkot,Gandhinagar',0)+1,len('Rajkot,Gandhinagar'))+''''
Вы не должны хранить несколько значений в столбце. Вместо этого используйте таблицу соединений. –
'SELECT '' '' + REPLACE ('Rajkot, Gandhinagar', ',', '' ',' '') + '' ''' – gofr1
@ gofr1 Я предполагаю, что он имел в виду нечто общее. – sagi