我正在尝试使用patindex()函数,其中我正在匹配“-”字符。
select PATINDEX('-', table1.col1 )
from table1
问题是它总是返回0。
以下内容也没有起作用:
PATINDEX('\-', table1.col1 )
from table1
PATINDEX('/-', table1.col1 )
from table1
我正在尝试使用patindex()函数,其中我正在匹配“-”字符。
select PATINDEX('-', table1.col1 )
from table1
PATINDEX('\-', table1.col1 )
from table1
PATINDEX('/-', table1.col1 )
from table1
PATINDEX
或LIKE
模式字符串中,-
字符没有特殊含义,不需要转义。问题不在于-
无法用于精确匹配该字符,而是您正在使用PatIndex
而非CharIndex
,并且未提供通配符。请尝试以下内容:SELECT CharIndex('-', table1.col1 )
FROM Table1;
如果您想匹配一个模式,它必须使用通配符:
SELECT PatIndex('%-%', table1.col1 )
FROM Table1;
SELECT PatIndex('%[a-]%', table1.col1 )
FROM Table1;
SELECT PatIndex('%[-a]%', table1.col1 )
FROM Table1;
a
或 -
。只有当模式在字符类内具有 -
两侧的字符时,它才会被解释为一个范围。CharIndex
。 - ErikEREPLACE(Column, '[_]', ' ')
进行更新,但无法弄清为什么它不起作用。正确的应该是REPLACE(Column, '_', ' ')
。 - bonhCREATE Function [dbo].[ReplaceSpecialCharacters](@Temp VarChar(200))
Returns VarChar(200)
AS
Begin
Declare @KeepValues as varchar(200)
Set @KeepValues = '%[-,~,@,#,$,%,&,*,(,),!,?,.,,,+,\,/,?,`,=,;,:,{,},^,_,|]%'
While PatIndex(@KeepValues, @Temp) > 0
SET @Temp =REPLACE(REPLACE(REPLACE( REPLACE (REPLACE(REPLACE( @Temp, SUBSTRING( @Temp, PATINDEX( @KeepValues, @Temp ), 1 ),'') ,' ',''),Char(10),''),char(13),''),' ',''), ' ','')
Return REPLACE (RTRIM(LTRIM(@Temp)),' ','')
End
我知道这是一个旧帖子,但在网络世界中找到有用的答案已经证明是徒劳无功的,我想节省其他人的挫败感。
我自己尝试创建一个检查约束来验证电话号码中的字符 - 这是我的模式:
CONSTRAINT Chk_Mobile CHECK (PATINDEX('%[^0-9+() -]%',Mobile) = 0)
基本上,当涉及到破折号时,SQL会将其解释为范围分隔符...
除非你将其放在模式的结尾。
select PATINDEX('%[-]%', table1.col1 )
from table1
看起来它能工作,但我不知道为什么。
%
符号。这将它转换为一个模式,而PatIndex
正是在寻找这样的模式。在这种情况下,在字符类中放置-
字符没有任何效果。 - ErikE