问题:是否可以使用regexp匹配>*2014*</year
子字符串,以便只有最近的>
字符才能匹配。另一种说法是使用regexp来匹配>...XXXX...</year
子字符串,但在子字符串匹配中不允许使用<
char。
Mysql regexp查询选择year = 2014记录,但这会溢出开始结束标记>*2014*</year
并返回额外的行。我相信它从之前的<start>2014-MM-DD</start>
标记开始匹配。
Select * From table1 Where args REGEXP '>.*(2014).*<\/year'
我不使用'<year>.*(2014).*<\/year>'
的原因是一年或多年,year_0,year_1标签等数组标签数量不受限制。我需要选择年份(包含)2014的任何行,无论哪个年份标记值。
简化示例args列值,每行是一个单独的表行。标记值不仅仅是year (equals) 2014
,还有any year (contains) 2014
公式。
<title>Record 1</title><start>2014-01-31</start><year>text 2013 text</year><end>2014-02-17</end>
<title>Record 2</title><start>2014-01-03</start><year>any 2014 text</year><end>2014-01-26</end>
<title>Record 3</title><start>2014-03-07</start><year>aa 2015 bb</year><end>2014-03-12</end>
<title>Record 4m</title><start>2014-02-22</start><year>2014</year><year_0>like 2015 this</year_0><end>2014-03-01</end>
<title>Record 5m</title><start>2015-02-23</start><year>bb 2012 cc</year><year_0>2014 dd</year_0><year_1>2014</year_1><end>2015-03-02</end>
<title>Record 6m</title><start>2014-02-22</start><year>2013</year><year_0>like 2015 this</year_0><end>2014-03-01</end>
<title>Record 7m</title><year>2013</year><start>2014-02-22</start><year_0>like 2015 this</year_0><end>2014-03-01</end>
以下regex101.com online example显示溢出问题,我需要匹配年,year_0,year_1 等标签,而不仅仅是<year>
标签。这不应该与记录匹配,因为年份有2013,2015个子串。
修改以下SqlFiddle online example显示溢出问题 any_year = 2014 匹配不正确的行,我需要匹配年份,年份_0,年份1,... 。仅限数组值。不应列出第7m行。
Edit2 最佳答案我认为到目前为止Where args REGEXP '<year[>_].*2014.*<\/year[>_]'
是在一个正则表达式中查找年份值数组。
答案 0 :(得分:2)
你只需要用反斜杠\/
http://sqlfiddle.com/#!9/0bbb0/8
SELECT *
FROM t1
WHERE args REGEXP '<year>.*2014.*<\/year>'
更新 http://sqlfiddle.com/#!9/0bbb0/9
SELECT *
FROM t1
WHERE args REGEXP '<year.*>.*2014.*<\/year.*>'