我一直试图找到一种方法,使用MySQL的REGEXP函数只返回匹配行的一部分。
我在做: SELECT * FROM表WHERE文本REGEXP“[。] cat [。]”
文本本身很长(必须使用LONGTEXT字段才能使其适合表格)。所以我只想显示
猫
我有没有办法让它只显示匹配的文字,而不是整个文字字段?
答案 0 :(得分:1)
找到答案。使用MySQL UDF PREG。
https://github.com/mysqludf/lib_mysqludf_preg
我很难在我的redhat服务器上安装它。我按照以下步骤操作:
https://gist.github.com/kamermans/1658660(如果该页面消失,请执行以下步骤:)
yum -y install pcre-devel gcc make automake mysql-devel
此文件不可用。我只是用谷歌搜索文件名并在网上找到它。
wget http://www.mysqludf.org/lib_mysqludf_preg/lib_mysqludf_preg-1.0.1.tar.gz
其余步骤应如下所示:
tar -zxvf lib_mysqludf_preg-1.0.1.tar.gz
cd lib_mysqludf_preg-1.0.1
./configure
make install
echo "You'll need to enter your MySQL password a few times to install the UDFs and test them"
mysql -u root-p < installdb.sql
make test
答案 1 :(得分:-1)
根据你的评论:
既然我明白了你需要做什么,答案是,这在MySQL中并不存在。 MySQL不是解析冗长文本文件的语言。您需要编写一个连接到MySQL的Perl脚本,或使用其他一些通用语言来进行解析。
所以答案是否定的。
没有办法显示匹配的文字,即使这没有意义。如果text
列确实那么长,您不必在select
查询中抓取它。
或者您可以执行MySQL substring function之类的操作,只获取前n个字符。
select substring(text, 0, 10) from table where text like '%cat%';
您无需在此处使用REGEXP功能。您可以使用like
运算符,如上所示。