Я пытаюсь получить информацию о продуктах, имеющих идентификатор, содержащийся в списке. Проблема заключается в том, что список содержит несколько отдельных значений и некоторые значения диапазона:SQL: итерирование по списку, который содержит некоторые диапазоны
PX03 - PX069, PX20, PX202, PX25 - PX270, PX250 - PX2509, PX251, PX2511 - PX2513
В основном то, что я ищу, - это какой-то способ взять список или строку, содержащую оба значения и диапазоны, а конечный вывод - это таблица или список, который имеет все значения в пределах диапазонов индивидуально, чтобы я мог их пропустить.
У меня есть хранимая процедура, которая проходит через все идентификаторы в таблице основных продуктов, которые используют префикс «PX», но таблица имеет все идентификаторы (то есть PX 1 - 9999, LX 00001 - 99999), и я хочу только для поиска по содержащимся в приведенном выше списке. Я мог бы написать все индивидуальные идентификаторы, но некоторые из диапазонов содержат много значений, которые потребуют много времени для прохождения.
Моя идея состояла в том, чтобы создать отдельную таблицу, содержащую этот список, в которой будет три столбца: столбец идентичности, а затем один столбец для начала и конца диапазона. Любые предметы, которые не имеют диапазон только бы иметь такое же значение для начала и конца диапазона, то есть:
----------------------------------
rownum | range_start | range_end|
----------------------------------
1 PX03 PX069
2 PX20 PX20
3 PX202 PX202
4 PX25 PX25
5 PX250 PX2509
, а затем заполнение таблицы, используя что-то вроде:
SELECT id from product_table
WHERE id BETWEEN listtable.range_start AND listtable.range_end
где product_table мой оригинал таблица с идентификатором продукта и их информацией и списком - новая таблица, которую я только что создал. Это дало бы мне:
id|
---
PX03
PX030
PX031
PX032
PX033
.
.
.
PX067
PX068
PX069
PX20
PX202
PX25
PX250
PX251
т.д.
, но я имею в виду, я должен был бы итерацию по списку, и я не знаю, как сделать это. Любые идеи, подсказки или предложения?
UPDATE
После создания таблицы с помощью решения, данное @asantaballa, это было так же просто, как с помощью внутреннего соединения:
SELECT d.id
FROM product_table d
INNER JOIN @RangeTable r
ON d.id BETWEEN r.RangeFrom AND r.RangeTo
Вы просто пытаетесь получить строки для продуктов, где их идентификатор находится в наборе Идентификаторы? Или ваш главный вопрос об превращении этого списка в набор идентификаторов? – ryanyuyu
@ryanyuyu, вот что я пытаюсь сделать, но там, где есть диапазон, я хочу получить все значения в диапазоне. Это не числовой диапазон, поле ** varchar ** –
Будьте осторожны при использовании 'BETWEEN' для текстовых диапазонов. Например, значение 'PX260' ** не ** между текстовым диапазоном:' PX250-PX2509' –