如果字符串包含'&',则SQL Query不返回任何内容

时间:2015-10-31 06:45:50

标签: sql-server tsql

position: relative;
width: 100%;
height: auto;
margin-top: 0px;
margin-bottom: 0px

用'&'传递@vchrText时在它没有返回任何东西,如果它不在那么它返回有效的结果,为什么。??上面的查询实际上做了什么..?

1 个答案:

答案 0 :(得分:2)

您的脚本存在的问题在于PATINDEX中使用的STUFF模式:

这个表达式:

PATINDEX('%[^a-zA-Z0-9&]%', @vchrText)

包含&。因此,PATINDEX会返回0,因为@vchrText包含&个字符。传递给它的起始索引为STUFF时,NULL返回0。因此,您最终会在NULL时收到@vchrText = 'AB&CDC'作为输出。

PATINDEX谓词中使用的WHILE模式不包含&。因此,它可以正确检测@vchrText中包含的任何非字母数字字符。如果@vchrText仅包含 字母数字字符,则会返回0

底线:要修复您的脚本,只需修复PATINDEX中使用的STUFF模式,使用'%[^a-zA-Z0-9]%'代替'%[^a-zA-Z0-9&]%'