SQL Server查询最长季数剧集时结果异常的问题求助
SQL Server查询Netflix剧集最长季数结果不一致的原因及解决办法
问题还原
你从Kaggle的netflix_data表查询剧集季数:
- 执行以下语句时,能看到季数范围包含1到17季:
select distinct duration from netflix_data where type = 'Tv Show' - 但执行关联标题的排序查询时,结果里最长只显示到9季,和之前的结果矛盾:
SELECT distinct duration, title from netflix_data where type = 'Tv Show' order by duration desc
核心原因
问题出在duration字段的数据类型是字符串,而非数值类型。SQL Server对字符串排序是按字符的ASCII码顺序进行的:
- 字符串"9 Seasons"的首字符是'9',ASCII码为57
- 字符串"17 Seasons"的首字符是'1',ASCII码为49
- 因为'1' < '9',所以字符串排序时"9 Seasons"会排在"17 Seasons"之前,导致你在结果顶部只能看到9季的内容,而17季的记录被排在了后面(可能你没翻到)。
验证方法
可以先确认duration字段的类型:
SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'netflix_data' AND COLUMN_NAME = 'duration';
解决办法
将duration中的数字部分提取并转换为数值类型,再按数值排序:
SELECT DISTINCT duration, title FROM netflix_data WHERE type = 'Tv Show' ORDER BY CAST(SUBSTRING(duration, 1, CHARINDEX(' ', duration)-1) AS INT) DESC;
该语句通过SUBSTRING提取duration中的数字部分,再用CAST转为整数,最终按数值从大到小排序,就能正确显示17季的剧集在最顶部。
内容的提问来源于stack exchange,提问作者Gabriel B
相关产品推荐
相关产品推荐

