Как получить значение строки из значений запятой - PullRequest
0 голосов
/ 30 октября 2019

Ниже приведены данные моей таблицы XYZ

Sno  ProgramID    ProgramName
 1      1,2          CCE
 2      3,11         DDU

Я хочу вывод, как показано ниже, с передачей ID программы 1

Sno  ProgramID    ProgramName

 1      1,2          CCE

Я пытаюсь выполнить запрос, как показано ниже

select * from XYZ  where ProgramID in('1')

По вышеприведенному запросу ничего не получено, мой вопрос - соответствие одного значения в запросе. Я не хочу, чтобы запрос совпадал с точным значением

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Вы можете использовать:

 Select *  from XYZ  WHERE (',' + Rtrim(ProgramID) + ',') LIKE '%,1,%'

Используйте TRIM для устранения пробелов в начале и конце строки.

2 голосов
/ 30 октября 2019

У вас неверная модель данных. Вы можете делать то, что вы хотите, используя LIKE:

select *
from XYZ 
where ',' + ProgramID + ',' like '%,1,%';

Тем не менее, вы должны понимать, почему хранение нескольких значений в строке неправильно :

  • Числа должны храниться в виде чисел, а не строк.
  • Идентификаторы должны иметь правильно объявленные ссылки на внешние ключи, что нельзя сделать со строкой.
  • SQL имеет плохие возможности обработки строк.
  • Запросы не могут использовать индексы и разделы и, вероятно, приводят в замешательство оптимизатор.
  • Поддерживать строку, чтобы избежать дублирования, сложно.
  • SQL имеет тип данных great для хранения списков. Он называется таблица , а не строка .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...