Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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

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,Sql Server,Sql Server 2008,Tsql,Pattern Matching,User Defined Functions,请帮助我编写一个PATINDEX或类似语句,以匹配以下字符以外的字符: A-Z、0-9、连字符(-)、句点()、下划线(_)和波浪号(~) 我计划在带有nvarchar(200)输入的标量UDF中使用它,它通过以下方式处理输入: 用连字符(-)替换不匹配的字符 将出现的两个连字符(-)替换为单个(-) 删除前导和尾随的hypens(-) 返回已处理的输入 这将用于创建SEO友好URL的一部分,例如/my-SEO-friendly-URL-1。除了模式匹配部分,我对做这个UDF非常有信心。类似

请帮助我编写一个PATINDEX或类似语句,以匹配以下字符以外的字符:

  • A-Z、0-9、连字符(-)、句点()、下划线(_)和波浪号(~)
我计划在带有nvarchar(200)输入的标量UDF中使用它,它通过以下方式处理输入:

  • 用连字符(-)替换不匹配的字符
  • 将出现的两个连字符(-)替换为单个(-)
  • 删除前导和尾随的hypens(-)
  • 返回已处理的输入
  • 这将用于创建SEO友好URL的一部分,例如
    /my-SEO-friendly-URL-1
    。除了模式匹配部分,我对做这个UDF非常有信心。类似正则表达式的东西让我困惑!请帮忙


    提前感谢您的帮助。

    在您的应用程序中可能做得最好,但是

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

    应该在TSQL

    愚蠢的问题中这样做,但%是必需的吗?@ChrisCannon-如果一次只处理一个字符,则不需要。是的,如果您试图在包含多个字符的字符串中查找第一个字符。这是一个愚蠢的问题抱歉,这里还有另一个问题:如果我省略了校对,我可以省略a吗-Z@ChrisCannon-你的意思是使用
    a-z
    而不是两者都有?取决于默认的数据库排序规则。如果默认情况下有区分大小写或二进制排序规则,则会得到错误的结果,因此我会显式指定排序规则。我的数据库不区分大小写,我知道这一点,因为
    SELECT 1其中'abc'='abc'返回1?