У меня есть таблица, похожая на приведенную ниже.
id | episode_number
1 55
2 56
3 57-58
4 59
5 60
6 61-62
7 63
8 64
9 65-66
10 67-68
Как бы я получил следующие 5 эпизодов после 57-58 без указания идентификатора, просто episode_number, например episode_number> 57-58 LIMIT 5.
Но, очевидно, episode_number> 57-58 не сработает, поскольку содержит строку. База данных просто посчитает это как 5 и вернет следующие 5 результатов после episode_number 5.
использование Функция CAST чтобы преобразовать строку в число, тогда ваш запрос:
SELECT episode_number
FROM table_name
WHERE CAST(episode_number AS UNSIGNED) > CAST('57-58' AS UNSIGNED)
ORDER BY CAST(episode_number AS UNSIGNED)
LIMIT 5
Если есть два числа, например: «57 -58», то CAST('57-58' AS UNSIGNED)
преобразует и возвращает первый: 57
Пытаться
SELECT TOP 5 * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58")
или если это MySQL
SELECT * FROM tablename WHERE id >= (SELECT id FROM tablename WHERE episode_number = "57-58") LIMIT 5
Вы можете выбрать так:
select id , case when LOCATE('-' , episode_number) = 0 then episode_number
else LEFT(episode_number , LOCATE('-' , episode_number)) end
as start_episode ,
case when LOCATE('-' , episode_number) = 0 then episode_number
else RIGHT(episode_number , LEN(episode_number) -LOCATE('-' , episode_number)) end
as end_episode
это должно дать вам базовую структуру для таких запросов, вам следует рассмотреть возможность преобразования значений в числа, чтобы можно было легко их сравнивать.
Если возможно, реструктурируйте таблицу так, чтобы она имела начальный и конечный эпизоды в отдельных полях.