如何从sql中的字符串中获取数字

时间:2017-12-01 09:51:32

标签: sql sql-server azure-sql-database

我有一个像'sdf,11-df,12-asd,sadfsdf'这样的字符串。但我只需要这个字符串中的数字,如下所示。

  1. 11
  2. 12
  3. 我需要(,)和( - )之间的数字,这是实际要求。字符串可以像'sd47f,11-df,12-asd,sadfsdf,12-ds,32-fsdfsd',但数字总是在(,)和( - )之间

    或在(,)和( - )之间找到数字也会对我有帮助。

    提前致谢。 我需要任何解决方案的人请帮助,

2 个答案:

答案 0 :(得分:3)

试试这个

 DECLARE @data nvarchar(max) = 'sdf,11-df,12-asd,sadfsdf'
  select substring(@data,PATINDEX('%[0-9]%',@data),2)
  union all
  select substring(@data,PATINDEX('%[-]%',REVERSE(@data))-1,2)

<强>更新

  

您还可以使用以表格形式返回的函数

  CREATE FUNCTION dbo.udf_GetNumeric (@strAlphaNumeric VARCHAR(256))
RETURNS TABLE AS RETURN ( select   LEFT(value,2) as Value from
string_split(@strAlphaNumeric,',')  where PATINDEX('%[0-9]-%',value)
> 0 )

 END GO

 SELECT * from
 dbo.udf_GetNumeric('sd47f,11-df,12-asd,sadfsdf,12-ds,32-fsdfsd')

答案 1 :(得分:3)

以下内容适用于SQL Server 2016或更高版本:

DECLARE @str varchar(50) = 'sd47f,11-df,12-asd,sadfsdf,12-ds,32-fsdfsd'

SELECT
LEFT(Value, CHARINDEX('-', Value)-1)
FROM STRING_SPLIT(@str, ',')
WHERE PATINDEX('%[0-9]-%',Value) > 0