87 votes

Requête pour obtenir uniquement les chiffres d'une chaîne de caractères

J'ai des données comme ça :

string 1: 003Preliminary Examination Plan   
string 2: Coordination005  
string 3: Balance1000sheet

La sortie que j'attends est

string 1: 003
string 2: 005
string 3: 1000

Et je veux l'implémenter en SQL.

147voto

Luv Points 7630

Créez d'abord ceci UDF

CREATE FUNCTION dbo.udf_GetNumeric
(
  @strAlphaNumeric VARCHAR(256)
)
RETURNS VARCHAR(256)
AS
BEGIN
  DECLARE @intAlpha INT
  SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
  BEGIN
    WHILE @intAlpha > 0
    BEGIN
      SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
      SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
    END
  END
  RETURN ISNULL(@strAlphaNumeric,0)
END
GO

Utilisez maintenant le function comme

SELECT dbo.udf_GetNumeric(column_name) 
from table_name

SQL FIDDLE

J'espère que cela a résolu votre problème.

Référence

59voto

Devart Points 52715

Essayez celui-là -

Une requête :

DECLARE @temp TABLE
(
      string NVARCHAR(50)
)

INSERT INTO @temp (string)
VALUES 
    ('003Preliminary Examination Plan'),
    ('Coordination005'),
    ('Balance1000sheet')

SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1) 
FROM (
    SELECT subsrt = SUBSTRING(string, pos, LEN(string))
    FROM (
        SELECT string, pos = PATINDEX('%[0-9]%', string)
        FROM @temp
    ) d
) t

Salida:

----------
003
005
1000

24voto

Epsicron Points 241

Une requête :

DECLARE @temp TABLE
(
    string NVARCHAR(50)
)

INSERT INTO @temp (string)
VALUES 
    ('003Preliminary Examination Plan'),
    ('Coordination005'),
    ('Balance1000sheet')

SELECT SUBSTRING(string, PATINDEX('%[0-9]%', string), PATINDEX('%[0-9][^0-9]%', string + 't') - PATINDEX('%[0-9]%', 
                    string) + 1) AS Number
FROM @temp

17voto

TechDo Points 11224

Essayez, s'il vous plaît :

declare @var nvarchar(max)='Balance1000sheet'

SELECT LEFT(Val,PATINDEX('%[^0-9]%', Val+'a')-1) from(
    SELECT SUBSTRING(@var, PATINDEX('%[0-9]%', @var), LEN(@var)) Val
)x

9voto

Obtenir uniquement des chiffres à partir d'une chaîne de caractères peut être fait en une seule ligne. Essayez ceci :

SUBSTRING('your-string-here', PATINDEX('%[0-9]%', 'your-string-here'), LEN('your-string-here'))

NB : Ne fonctionne que pour le premier int de la chaîne, ex : abc123vfg34 renvoie 123.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X