标签: mysql-udf

如何在MySQL中替换正则表达式?

我有一张约500k行的桌子; varchar(255)UTF8列filename包含文件名;

我试图从文件名中删除各种奇怪的字符 - 我以为我会使用一个字符类: [^a-zA-Z0-9()_ .\-]

现在,MySQL中是否有一个函数可以让你通过正则表达式替换?我正在寻找与REPLACE()函数类似的功能 - 简化示例如下:

SELECT REPLACE('stackowerflow', 'ower', 'over');

Output: "stackoverflow"

/* does something like this exist? */
SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-'); 

Output: "-tackover-low"
Run Code Online (Sandbox Code Playgroud)

我知道REGEXP/RLIKE,但那些只检查是否有匹配,没有什么比赛是.

(我可以SELECT pkey_id,filename FROM foo WHERE filename RLIKE '[^a-zA-Z0-9()_ .\-]'从PHP脚本做一个" ",做一个preg_replace然后" UPDATE foo ... WHERE pkey_id=...",但这看起来像一个最后的缓慢和丑陋的黑客)

regex mysql mysql-udf

482
推荐指数
11
解决办法
42万
查看次数

MYSQL UDF函数返回XML

情况:

我想创建一个名为XMLify的mysql函数,它接受一个字符串和一个将返回一个集合的表达式

XMLify(string, expr)

该函数应将集合中每个返回行的每个返回字段包装到其自己的XML标记中.标签的名称应该是字段名称.

小例子:

select XMLify('foo', (SELECT 1 as `a`, 2 as `b` UNION SELECT 3 as `a`, 4 as `b`));
Run Code Online (Sandbox Code Playgroud)

应该返回:

<foo><a>1</a><b>2</b></foo><foo><a>3</a><b>4</b></foo>
Run Code Online (Sandbox Code Playgroud)

我想拥有它,因为它将使我能够运行具有许多连接和/或从属子查询的复杂查询,而无需将冗余数据返回给客户端.

我已经有一个没有我想要构建的功能的解决方法.但这涉及编写难以维护的难题.请参阅下面的示例.

确保字段名称是合法的XML节点名称是为了以后的担心.一旦函数成立,我将考虑一些算法,它将获取字段名称并将其转换为一些合法的XML节点名称.

转义XML数据也是为了以后担心.这将通过一个名为的不同函数来完成,该函数CDATAify将简单地将所有数据包装到<![CDATA[和中]]>,并且将]]>在数据中的任何先前出现中转义]]]]><![CDATA[>.

我无法使用MySQL中的存储函数来完成此操作,因为这些函数不会接受结果集.此外,即使您将SQL作为字符串传递,然后准备语句并执行它,如果您还不知道字段名称,则无法访问这些字段.

所以现在我想知道是否可以使用用户定义的函数(UDF)来完成这个技巧.这是我还没有合作过的东西,我想在你开玩笑之前给你建议.

问题:

所以我现在的问题是:

  • 回顾一下,我想有一个MySQL函数,我可以传递一个表达式或结果集,我也可以使用结果集的字段名称.
  • 我是否认为在存储函数中这是不可能的?
  • UDF会将实验/结果集作为参数吗?
  • UDF是否允许我访问结果集的字段名称,因此我可以将它们用作XML标记名称
  • 它也可以在Windows上运行吗?我读到UDF有一些局限性
  • 有没有更好的方法我还没有想到呢?
  • 我是否能够在我自己的开发计算机上创建一个UDF .dll,然后将.dll文件复制到我的服务器并在那里使用它?
  • 如何在滚动中获得此节目?请仔细考虑我在Windows计算机上安装MySQL 5.5 64位.

例:

想象一下,有以下3个表格:

users:         grades:             toys:
+----+------+  +--------+-------+  +--------+--------------+
| id | name |  | userid | grade |  | userid | toy          |
+----+------+  +--------+-------+  +--------+--------------+ …
Run Code Online (Sandbox Code Playgroud)

xml mysql mysql-udf

12
推荐指数
1
解决办法
687
查看次数

标签 统计

mysql ×2

mysql-udf ×2

regex ×1

xml ×1