SELECT SUBSTRING(myfield,
/* 5-th slash */
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield) + 1) + 1) + 1) + 1)
+ 1,
/* 6-th slash */
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield) + 1) + 1) + 1) + 1) + 1)
-
/* 5-th slash again */
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield,
CHARINDEX('/', myfield) + 1) + 1) + 1) + 1)
- 1)
FROM myTable
WHERE ...
Это будет работать, но это далеко не изящно. Если возможно, выберите полное поле и отфильтруйте требуемое значение на стороне клиента (используя более мощный язык программирования, чем T-SQL). Как вы можете видеть, T-SQL не был предназначен для такого рода вещей.
(Edit: я знаю следующее не относится к вашей ситуации, но я буду держать это как слово посоветуйте для тех, кто читал это :)
В самом деле, реляционные базы данных не предназначены для работать со списками значений, разделенными по строкам, поэтому лучшим решением было бы разделить это поле на отдельные поля в вашей таблице (или в подтаблицу, если количество записей меняется).
Эта база данных вы используете? – Jeff
SQL Server 2005 – Ode
Если возможно, вам может потребоваться пересмотреть дизайн базы данных и использовать отдельные поля для ваших блоков данных вместо разделителей строк. – Heinzi