Получение следующих результатов

У меня есть таблица, похожая на приведенную ниже.

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.

-1

Решение

использование Функция 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

1

Другие решения

Пытаться

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
1

Вы можете выбрать так:

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

это должно дать вам базовую структуру для таких запросов, вам следует рассмотреть возможность преобразования значений в числа, чтобы можно было легко их сравнивать.
Если возможно, реструктурируйте таблицу так, чтобы она имела начальный и конечный эпизоды в отдельных полях.

0
По вопросам рекламы [email protected]