我在表格中有很多帖子,这些帖子都有日期标题字符串,例如“ 1.1.1990”或“ 31.12.2000”。

我正在寻找一种正则表达式的方式来使我的MySQL查询

a)某些年份之间的职位(例如1960年至1990年)

b)确切日期之间的帖子(例如1.1.1960-1990年12月31日)

我以某种方式尝试过:

SELECT ID FROM posts WHERE post_title LIKE '%.1960'


(这为我提供了post_title中所有带有“ 1960”的帖子,因此我可以循环使用其他所有年份并将结果加在一起)

但是:我认为使用正则表达式一定更容易实现,
例如

SELECT * FROM posts WHERE post_title REGEXP '^(\d+)\.(\d+)\.(\d+)$'


...例如,最后一位数字可以是日期范围(1960-1990)。

可能吗?

最佳答案

您应该以这种方式使用string_to_date(),以便将日期解析为mysql中的实际日期,从而可以使用所有内置函数(例如YEAR和BETWEEN)

SELECT ID
FROM posts
WHERE YEAR(string_to_date(post_title, '%m.%d.%Y')) > 1959 AND YEAR(string_to_date(post_title, '%m.%d.%Y')) < 1991


和一个范围

SELECT ID
FROM posts
WHERE string_to_date(post_title, '%m.%d.%Y') BETWEEN '1960-01-01' AND '1990-12-31'

09-13 12:17