SQL Server:选择不是数字0-9的第一个字符或/

Gif*_*guy 1 sql t-sql sql-server string text

我有一个名为的表Person,以及一个NVarChar名为的列Notes.

Notes列中包含大量文本,但始终以某种形式开头,并且始终/插入.

例如:

1/23 some text
45/678/9%*&^%$#@
02/468/ some other text
Run Code Online (Sandbox Code Playgroud)

我需要选择第一个不是数字的字符位置/.
我不关心这个职位是基于0还是基于1; 事后我可以容纳.

在此示例中,如果我使用的是基于1的字符位置,则选择应生成以下内容:

5
9
8
Run Code Online (Sandbox Code Playgroud)

Jer*_*ert 5

所以你正在寻找一种匹配某种模式的索引,比如模式索引.如果我们异想天开,我们可能会将其缩写为PATINDEX.

SELECT PATINDEX('%[^0-9/]%', Notes)
FROM Person
Run Code Online (Sandbox Code Playgroud)

  • 在开始或结束时把它搞定:`[^ 0-9/ - ]`.`-`只有在它可以在两个其他字符之间形成一些有效范围时才是特殊的.更多示例[这里](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/wildcard-character-s-to-match-transact-sql),虽然文档是疏. (2认同)