sql-server - SQL Server 2008 r2 - T-SQL LIKE 或 PATINDEX 匹配 A-Z、0-9、连字符、句点、下划线和波形符以外的字符

标签 sql-server sql-server-2008 tsql pattern-matching user-defined-functions

请帮我编写一个 PATINDEX 或 LIKE 语句来匹配以下字符其他:

  • A-Z、0-9、连字符 (-)、句点 (.)、下划线 (_) 和波形符 (~)

我计划在带有 nvarchar(200) 输入的标量 UDF 中使用它,它通过以下方式处理输入:

  1. 将不匹配的字符替换为连字符 (-)
  2. 将出现的两个连字符 (--) 替换为单个连字符 (-)
  3. 删除前导和尾随连字符 (-)
  4. 返回处理后的输入

这将用于创建 SEO 友好 URL 的一部分,例如/my-seo-Friendly-url-1。除了模式匹配部分之外,我对做这个 UDF 非常有信心。类似正则表达式的东西让我很困惑!请帮忙。

感谢您提前提供的帮助。

最佳答案

可能最好在您的应用程序中完成,但是

SELECT PATINDEX('%[^-a-zA-Z0-9.~_]%', @YourString COLLATE Latin1_General_BIN)

应该在 TSQL 中执行

关于sql-server - SQL Server 2008 r2 - T-SQL LIKE 或 PATINDEX 匹配 A-Z、0-9、连字符、句点、下划线和波形符以外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675020/

相关文章:

sql-server-2008 - 如何在 SQL 中选择行作为 View 的列?

SQL代理作业: Determine how long it has been running

tsql - 对 Bigint 求和并除以小数精度的结果?

sql - tSQL - 从 varchar 到数字的转换适用于除整数之外的所有字符

sql - 添加特殊约束以避免出现这种情况的重复行?

SQL 服务器 : get max value between a range of values with additional data

sql - 使用 T-SQL 根据年月日创建日期

tsql - 将 nvarchar 转换为十进制 t-sql 时出现问题

sql - 通过将表列映射到其他表的列值来重命名表列

sql-server - 触发器内游标中的 SQL Server 错误处理