MySQL:正则表达式和通配符

MySQL: Regular Expressions & Wildcards

在 MYSQL table 中,我有一个字段为

的多个文本条目

在以下时间后无效:12 月 2 日 19:40:51 2016 GMT

我想做的是使用 REGEXP 查找这些条目并忽略任何小于 Dec 31 23:59:59 2016 GMT 的条目。解决此问题的最佳方法是什么?

示例:SEARCH_STRING 其中 TABLE_COLUMN REGEXP "Not Valid After: blah blah" 小于 Dec 31 23:59:59 2016 GMT。

我知道这个例子有点缺乏正确的语法,但我相信你能理解我要表达的意思。我如何获取设定日期,将其与隐藏在较大文本细节中的特定字符串中列出的日期进行比较,并忽略 now() 和预设时间(年底)之间的任何内容?

我可能会规范化数据库,以便该列只是一个日期,然后您可以使用标准比较函数 (<=)。或者,您可以使用匹配 4 年整数的正则表达式。类似于:

Not Valid After .* (20([0][0-9]|1[0-6])|1[0-9]{3}) GMT"

在 mysql 中用作:

COLUMN not REGEXP "Not Valid After .* (20([0][0-9]|1[0-6])|1[0-9]{3}) GMT"

示例:http://sqlfiddle.com/#!9/26b735/4

随着时间的推移,您需要增加字符 class、1[0-6];明年 1[0-7].

这是另一种方法:

YEAR(STR_TO_DATE(COLUMN, 'Not Valid After: %b %d %H:%i:%s %Y GMT')) < 2017