#sql-server-2017
Вопрос:
У меня есть таблица со столбцом equipments VARCHAR(100)
. Я помещаю имена оборудования, разделенные запятыми, в этот столбец в виде строки.
Примерное значение может быть:
"PKM_119160.000, PKM_119160.135"
Теперь я хочу отфильтровать значения этой таблицы, используя массив имен оборудования, проверяя, является ли какое-либо значение этого массива подстрокой equipments
. Поэтому, если я передам массив, такой как
["PKM_119160.000", "PKM_119160.216"]
Мне нужно извлечь приведенную выше строку как "PKM_119160.000"
подстроку "PKM_119160.000, PKM_119160.135"
. Я мог бы использовать IN
, если equipments
бы столбец содержал одно название оборудования.
Как я могу получить здесь правильные значения? Что мне теперь делать? ТИА
Комментарии:
1. Я помещаю имена оборудования, разделенные запятыми, в виде строки в этот столбец -это источник всего зла в вашем случае — не делайте этого! — это нарушает даже первую нормальную форму проектирования реляционных баз данных. Если у вас есть несколько значений для хранения — используйте дочернюю таблицу!
2. В то время как можно компенсировать нарушение 1NF в дизайне таблиц большим количеством кода, вы теряете главное преимущество использования базы данных. Если вы перейдете к дизайну таблиц заголовка/сведений, ваша «проблема» станет простым соединением, которое будет работать намного лучше.
3. В обозначает операцию с таблицей. Это не будет работать со строками. В то время как вы можете использовать ПОДОБНОЕ, это небезопасно. SQL Server не имеет встроенных функций регулярных выражений. Для разделения строки, подобной этой, обратитесь к Джеффу Моденсу, отличной функции разделения> > sqlservercentral.com/articles/…
4. Большое всем вам спасибо за ваши приятные комментарии. Я собираюсь изменить базу данных, создав дочернюю таблицу, как указано в @marc_s. Большое вам спасибо за предложения