这个简单的例子说明了我遇到的问题,但我不明白为什么......
我正在测试第一个字符的位置,该字符是大小写字母,单个短划线或传递给我的字符串参数中的句点。
这两个模式匹配似乎检查相同的事情,但是自己运行此代码并且它将打印0然后是3:
PRINT PATINDEX ( '%[a-z,A-Z,-,.]%', '16-82')
PRINT PATINDEX ( '%[-,a-z,A-Z,.]%', '16-82')
如果短划线字符是我们检查的第一个字符,我不明白它为什么只能 。
这是一个错误吗?或者按照设计工作,我错过了一些东西......我使用的是SQL Server 2016,但我认为这并不重要。
答案 0 :(得分:3)
角色组中的破折号可以扮演两个角色中的任何一个:
[-abc]
[a-z]
中一样。在您的特定示例中,字符组[a-z,A-Z,-,.]
表示以下内容:
a
到z
,
A
到Z
,
到,
的所有内容(即再次使用逗号)。.
事实上,你可能想写[-a-zA-Z.]