【问题标题】:SQL Server 2008 r2 - T-SQL LIKE or PATINDEX to match characters OTHER than A-Z, 0-9, hyphen, period, underscore and tildeSQL Server 2008 r2 - T-SQL LIKE 或 PATINDEX 以匹配除 A-Z、0-9、连字符、句点、下划线和波浪号以外的字符
【发布时间】:2012-05-27 08:23:30
【问题描述】:

请帮我写一个 PATINDEX 或 LIKE 语句来匹配 other 以外的字符:

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    应该在 TSQL 中进行

    【讨论】:

    • 愚蠢的问题,但需要 % 吗?
    • @ChrisCannon - 如果您一次只处理一个字符,则不会。是的,如果您试图在包含多个字符的字符串中查找第一个字符。
    • 这是一个愚蠢的问题,抱歉,这是另一个问题:如果我省略 COLLATE,我可以省略 A-Z
    • @ChrisCannon - 你的意思是只使用a-z 而不是两者都有?取决于您的默认数据库排序规则。如果默认情况下您有区分大小写或二进制排序规则,那么您将得到错误的结果,因此我明确指定了排序规则。
    • 我的数据库不区分大小写,我知道这是因为SELECT 1 WHERE 'abc' = 'ABC'; 返回1?
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多