Mysql 提取在正则表达式中匹配并以空间为界的子字符串

Mysql 提取在正则表达式中匹配并以空间为界的子字符串,mysql,regex,Mysql,Regex,试图解析以各种方式和上下文输入的日期,这些日期可能存在于给定记录中,也可能不存在于给定记录中 我可以使用 SELECT * FROM table WHERE column REGEXP '[-|.|/][0-9][0-9][-|.|/]' ; 这确实会选择读取如下内容的记录 I was on top of mount Everest (2010-10-10) i went to see the doctor on 13/12/10 and she told me I was in great

试图解析以各种方式和上下文输入的日期,这些日期可能存在于给定记录中,也可能不存在于给定记录中

我可以使用

SELECT * FROM table WHERE column REGEXP '[-|.|/][0-9][0-9][-|.|/]' ;
这确实会选择读取如下内容的记录

I was on top of mount Everest (2010-10-10)
i went to see the doctor on 13/12/10 and she told me I was in great shape.
其中,第一个和第二个记录的匹配值分别为-10-和/12/

现在,我想从列中提取日期。不仅仅是-10-或/12/,而是完整的日期片段2010-10-10或13/12/10,即匹配的表达式向后扩展到空格或括号,并向前扩展为括号中的空格


很抱歉,如果这是显而易见的-我不熟悉正则表达式。

您必须找到日期输入的模式。您可以在where中使用regex,但您需要以某种方式将其隔离。它总是最后一部分吗

现在已经隔离了位置,可以执行案例样式选择

选择案例 如果是rightdate,4介于1900和2200之间,则是rightdate,10 mm/dd/yyyy 当leftdate为4,介于1900和2200之间时,则ConcatenateLeftTrightDate为5,2,/,rightdate为2 结束日期

那种折磨

编辑

SET@fieldName=2010年10月22日,我在珠穆朗玛峰顶上

选择如果 截止日期 海螺 右子串_INDEX@fieldName,-,1,4,-,右子串_INDEX@fieldName,-,2,2,-,左子字符串_INDEX@fieldName,-,-1,2 ,“%Y-%m-%d” 是空的

糟糕的约会

好日子

但现在,对于坏日期和好日期,您将继续链接该样式以循环所有日期变体


尽管最好的解决办法是在输入日期时,尽可能将其设置为特殊格式的diff col

但在这种情况下,合适的正则表达式是[0-9+-][0-9][0-9][0-9][0-9][0-9][0-9+][0-9+][0-9++][0-9+][0-9+/-][0-9+][0-9+/-][0-9++/][0-9++++/][0-9+/-][0-9+/+++/-][0-9+/-][0-9+/+/++/-][0-99/-/+/++++/-][这是你真正想要的吗

考虑使用

(?:(?P<year>\d{3,4})|(\d{1,2}))(?P<sep>[-./])\d{1,2}(?P=sep)(?(year)\d{1,2}|\d{1,4})
相反。它不允许像1.2-2014这样的混合分离器,也不允许像2010-10-2010这样多个数字的位数超过2位


可以在任何地方。可以是各种模式。现在,我正在尝试避免编写脚本搜索看起来像日期的开始和结束所有日期都有两个/或两个-因此您可以使用子字符串_INDEXfieldName,-,1并尝试拆分和重新组合子字符串的结果某些日期使用。许多句子使用连字符或斜杠作为其他用途-例如,分隔从句