我有一张类似下面的表。
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
如何在没有特异性的情况下获得57-58之后的5集,只有episode_number如episode_number> 57-58 LIMIT 5.
但很明显episode_number> 57-58不起作用,因为它包含字符串。数据库只会将其视为5并在episode_number 5之后返回接下来的5个结果。
答案 0 :(得分: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 :(得分:1)
使用CAST function将字符串转换为数字,然后使用您的查询:
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
答案 2 :(得分:0)
您可以这样选择:
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
这应该为您提供此类查询的基本结构,您应该考虑将值转换为数字,以便能够轻松地比较它们。 如果可能的话,将表重组为具有分隔字段中的开始剧集和结束剧集的内容