在SQL Server中,您可以找到字符串中的第一个数字吗?

cod*_*000 18 sql-server string

我有一个varchar(50)sql server列,其数据如下:

RawData
----------------------------
Washington 40 New Orleans 32
Detroit 27 St. Louis 23
Run Code Online (Sandbox Code Playgroud)

我正在尝试解析数据,所以我有这样的事情:

WinningTeam     WinningTeamScore      LosingTeam    LosingTeamScore
-----------     ----------------      ----------    ---------------
Washington      40                    New Orleans   32
Detroit         27                    St. Louis     23
Run Code Online (Sandbox Code Playgroud)

我被卡住了.我打算用charindex找到第一个空间,但是一些城市名称(圣路易斯,纽约等)的名字中有空格.

有没有办法识别字符串中第一个数字的位置?

谢谢

Mar*_*ith 35

有没有办法识别字符串中第一个数字的位置?

SELECT PATINDEX('%[0-9]%','Washington 40 New Orleans 32')
Run Code Online (Sandbox Code Playgroud)

PATINDEX如果找不到模式则返回0,否则返回1匹配开头的基础索引.


小智 12

您可以使用PATINDEX函数而不是CHARINDEX,这里有文档;)


Tar*_*ryn 5

这是一个非常丑陋的实现,PATINDEX()它返回多列中的数据:

SELECT rtrim(substring(RawData, 1, PATINDEX('%[0-9]%', RawData) -1)) WinningTeam,
    ltrim(rtrim(substring(RawData, PATINDEX('%[0-9]%', RawData), 2))) WinningTeamScore,
    reverse(ltrim(rtrim(substring(reverse(SUBSTRING(RawData, 1, LEN(rawdata) - (PATINDEX('%[aA-zZ]%', REVERSE(rawData)) - PATINDEX('%[0-9]%', reverse(RawData))))), 1, PATINDEX('%[0-9]%', SUBSTRING(RawData, 1, LEN(rawdata) - (PATINDEX('%[aA-zZ]%', REVERSE(rawData)) - PATINDEX('%[0-9]%', reverse(RawData))))))))) LosingTeam,
    substring(reverse(RawData), PATINDEX('%[0-9]%', reverse(RawData)), (PATINDEX('%[aA-zZ]%', REVERSE(rawData)) - PATINDEX('%[0-9]%', reverse(RawData)))) LosingTeamScore
from yourtable
Run Code Online (Sandbox Code Playgroud)

参见SQL Fiddle with Demo