MySQL REGEXP筛选年份范围:如何列出1950年前的影片?
解决1950年前影片的筛选问题
你的SQL语句存在几个关键问题,导致筛选失败:
- 正则表达式不该用斜杠
/包裹,多数SQL的REGEXP参数直接写模式即可 - 用
^和$强制要求整个文件名是年份字符串,但你的文件名是「电影名 + 年份」的格式,前面还有电影名,完全匹配不上 - 正则的年份范围写错了,
190[1-9]\d会匹配五位数的数字(比如19010),根本不是正常年份,也没覆盖1900-1949的全部范围
下面给你两种简单可行的解决方法:
方法一:修正正则表达式
适合文件名年份格式不固定,但年份在末尾且前面有空格的情况:
SELECT * FROM streams WHERE type='movie' AND filename REGEXP ' (18[0-9]{2}|19[0-4][0-9])$';
(18[0-9]{2}:匹配1800-1899年(前面的空格是为了避免匹配电影名里的数字)19[0-4][0-9]):匹配1900-1949年$:确保年份在文件名的最后
方法二:用字符串函数提取年份(更简单)
如果你的文件名年份都是固定在最后四位,直接用RIGHT函数提取后比较即可,比正则更直观:
SELECT * FROM streams WHERE type='movie' AND RIGHT(filename, 4) < '1950';
内容的提问来源于stack exchange,提问作者sweetngx
相关产品推荐
相关产品推荐

