将RegEx嵌入Oracle或者SQL Server 2005 SQL的最佳方法是什么?

时间:2020-03-05 18:56:09  来源:igfitidea点击:

这是关于将RegEx嵌入到SQL语句中的三部分问题。

  • 如何将RegEx表达式嵌入到Oracle PL / SQL select语句中,该语句将解析出如下所示的文本字符串中的DELINQUENT字符串?
  • 如果用于关键任务业务交易中,会对性能产生什么影响?
  • 由于Oracle 10g和SQL Server 2005中引入了将正则表达式嵌入到SQL中,是否建议这样做?

亲爱的拉里:

感谢我们使用ABC的警报服务。

ABC已检测到一种产品处于KS状态的状态发生了变化。请查看
以下信息,以确定是否打算更改此状态。

实体名称:Oracle Systems,LLC

以前的状态:-

当前状态:已废止

提醒我们,我们可以联系ABC团队寻求协助,以纠正任何欠款,或者在需要时恢复
服务。或者,如果系统不打算继续进入此状态,请通知ABC
这样我们就可以停止我们的服务。

亲切的问候,

服务团队1
美国广播公司

  • 请不要回复这封邮件。它不是受监控的电子邮件帐户。--

注意:ABC Corporation无法独立验证公共信息的及时性,准确性或者完整性
由负责的政府机构或者这些警报所基于的其他数据源维护。

解决方案

回答

为什么不将INSTR(对于Oracle)或者CHARINDEX(对于SQL Server)与SUBSTRING结合使用?似乎更简单(并且可移植,因为在较早版本中受支持)。

http://www.techonthenet.com/oracle/functions/instr.php和http://www.adp-gmbh.ch/ora/sql/substr.html

http://www.databasejournal.com/features/mssql/article.php/3071531和http://msdn.microsoft.com/zh-CN/library/ms187748.aspx

回答

INSTR和CHARINDEX是很好的替代方法,但是我想探究嵌入Regex的好处。

回答

在MS SQL中,我们可以使用LIKE,其中包含一些"模式匹配"。我想Oracle也有类似的东西。它不是Regex,但具有一些匹配功能。 (注意:它不是特别快。)全文搜索也可以作为一种选择(再次针对MS SQL)(在大小合适的数据库中,这可能是一种更快的方法)

回答

为什么在这里需要正则表达式?
INSTR和SUBSTR将完美地完成这项工作。

但是,如果我们确信需要正则表达式,则可以使用:

REGEXP_INSTR
REGEXP_REPLACE
REGEXP_SUBSTR

(仅在Oracle 10g及更高版本中可用)

SELECT emp_id, text
  FROM employee_comment
 WHERE REGEXP_LIKE(text,'...-....');

回答

如果我没记错的话,可以在c#/ vb中为SQL Server编写UDF。
这是一个链接,尽管可能不是最好的:http://www.novicksoftware.com/coding-in-sql/Vol3/cis-v3-N13-dot-net-clr-in-sql-server.htm