PATINDEX 的纯 T-SQL 全部替换函数

前言
很抱歉由于心情和工作原因,未继续分享,本篇讲介绍定位函数的使用及实现,希望您阅览之后能够交流或提供一些建议。

尽管 SQL Server 是一个功能强大且功能齐全的数据库引擎,但它一直缺乏的一件事就是对正则表达式的支持。这没什么大不了的,因为您不需要(或至少不应该)经常在数据库中需要正则表达式,如果您确实需要它们,您可以随时为其编写一个简单的 C# 扩展,这要归功于SQL CLR。

或者,如果您在本地运行 SQL Server,至少可以。在 Azure 中,这是另一回事。在云中,CLR 仅在您运行托管实例时可用;如果您正在运行单个数据库或弹性池,则它不可用。

如果没有 CLR,就正则表达式而言,您基本上不走运。但是,您可以使用PATINDEX一起破解一些东西。在这篇文章中,我将展示 PATINDEX 的工作原理以及如何使用它来编写一个穷人的模式替换函数。

索引模式
PATINDEX 是 SQL Server 中的内置函数。它在字符串中找到与给定模式匹配的第一个索引。它不支持正则表达式;相反,它支持与LIKE运算符相同的模式。这意味着它可以进行一些有限的通配符模式匹配。

这是一个简单的例子。这个:

SELECT PATINDEX('%[a-z][a-z][a-z]%', 'aa bb ccc dd eee ff')

返回:
在这里插入图片描述
…这是输入字符串中第一次出现任何 3 个字符的单词的索引(请记住,SQL 使用基于 1 的索引… shudder)。

PATINDEX 的一些明显限制是:

  1. 它只支持简单的模式。
  2. 它只能匹配模式的第一次出现。
  3. 它不会返回它找到的匹配项。

我们将解决这些限制并创建一个可以接受任何输入字符串和模式的函数,并将模式的所有匹配项替换为其他内容。

花式算法
那么,我们该怎么做呢?一种天真的方法是只对输入进行while循环并继续替换,直到我们找不到更多匹配项

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喝茶品人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值