选择包含的字符串

时间:2013-02-11 19:47:33

标签: java mysql regex

这是我正在努力的一个非常简化的版本,但希望它能得到我的观点。

我有一个mysql表,看起来像这样:

CREATE TABLE Table1(
  ID INT AUTO_INCREMENT,
  Val VARCHAR(50),
     PRIMARY KEY (id)
  );
INSERT INTO Table1 (Val) SELECT "Reference.Int('ABCD')";
INSERT INTO Table1 (Val) SELECT "Reference.Str('EFG','ABC')";
INSERT INTO Table1 (Val) SELECT "Reference.Int('HIJ','EFG','ABC')";

我正在处理的方法作为参数接收括号中的一个值,例如:“EFG”。我是否可以获取表中包含此值的所有行。我知道如果我这样做:

SELECT * from Table1 where Val LIKE "%EFG%" 

我可以得到正确的值,我的问题是我需要更具体,因为例如其中一个值可能看起来像:

 Reference.Int('ABCD') + EFGX/200

EFG + anything else

这意味着我还需要以某种方式包含这些部分:“Reference.Str()”。我并不关心括号中的任何其他内容,我唯一关心的是获取包含我收到的参数值的那些。

我想知道这是否可以通过使用REGEXP解决,但我对此的了解充其量是微弱的。

感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

我认为这不适合SQL查询。你可能最好创建一个存储字符串中的标记的第二个表,以及一个返回父记录的引用。

所以你可以做类似

的事情
select record_id from tokens where token_val = 'EFG';

然后

select * from records where record_id in (*results from pervious query)

基本上,我们的想法是预先进行艰苦的工作,每个记录都要进行一次,而不是试图在每次查询时动态解析。

答案 1 :(得分:1)

试试这个:

SELECT * FROM Table1 WHERE Val LIKE "Reference.Str(%'EFG'%"

<强> SQL FIDDLE DEMO

答案 2 :(得分:1)

你可以使用正则表达式,但没有必要。只需在搜索字词中包含您的值周围的引号:

select ...
where val like '%\'EFG\'%'

答案 3 :(得分:1)

我认为您可以使用SUBSTRING_INDEX来获取括号中的部分字符串:

SUBSTRING_INDEX(SUBSTRING_INDEX(Val, "(", -1), ")", 1)

然后您可以使用FIND_IN_SET

SELECT *
FROM Table1
WHERE
  FIND_IN_SET(
    '\'EFG\'',
    SUBSTRING_INDEX(SUBSTRING_INDEX(Val, "(", -1), ")", 1)
  )

here