这是我正在努力的一个非常简化的版本,但希望它能得到我的观点。
我有一个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解决,但我对此的了解充其量是微弱的。
感谢任何帮助。
答案 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)
答案 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。