选择字符串,其中包含
这是我正在处理的一个非常简化的版本,但希望它能够得到我的观点。选择字符串,其中包含
我有一个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来解决这个问题,但我的这方面的知识充其量是最好的。
任何帮助表示赞赏。
您可以使用正则表达式,但没有必要。只是包括在搜索项周围的值引号:
select ...
where val like '%\'EFG\'%'
谢谢大家的回答,以及耐心的回答,愚蠢 – DVM 2013-02-11 20:19:02
我不认为这是一个很好的SQL查询。您可能最好创建另一个存储在字符串中找到的令牌的表,并返回父记录的引用。
所以你可以做这样的事情
select record_id from tokens where token_val = 'EFG';
然后
select * from records where record_id in (*results from pervious query)
基本的想法是做的辛勤工作了前面,一旦每个记录,而不是试图在飞行解析在每个查询上。
这将工作,如果只有“Reference.Str”,但有几个更多的变种,谢谢你的答案仍然 – DVM 2013-02-11 20:20:10
@DanielV对不起,我的错误,你必须得到共同的部分。 ''Reference.'你可以使用下面的语句:'SELECT * FROM Table1 WHERE Val LIKE'Reference。%(%'EFG'%)%“' – 2013-02-11 20:25:33
我认为你可以使用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。
我不明白这个问题。为什么'Val LIKE'%EFG%“'不够? – ruakh 2013-02-11 19:49:10
@ruakh:考虑以下值“参考。Int('EGFGASDSFSDGF')“ – 2013-02-11 19:51:25
所以会像”%'EFG'%“更好吗? – MadProgrammer 2013-02-11 19:52:51