2017-09-23 1 views
0

J'ai un tableau des informations suivantes.Chiffres de compte SQL dans une chaîne

description: adjkfa34kj34kj33j4k3jk4 
description: adfkjjkdf34_3434kjkjkj3 
description: akjdfkjadfkjadkjfkjadfj 
description: 34394394093040930949039 

Comment puis-je modifier la requête SQL ci-dessous pour compter le nombre de chiffres (par exemple [0-9]) dans les cordes?

select description as num_count 
from posts; 

Répondre

3

Une méthode consiste à se débarrasser de tous les autres personnages:

select length(regexp_replace(description, '[^0-9]', '', 'g')) 
+0

Je crois que le code ci-dessus manque une fermeture ")" à la fin du code. Quand je l'ai essayé, j'ai l'erreur: "la fonction len (texte) n'existe pas". –

+0

Je l'ai eu en travaillant avec: longueur (regexp_replace (ticker, '[^ 0-9]', '', 'g')) –

0

Essayez ceci,

CREATE FUNCTION dbo.udf_GetNumeric 
    (
     @strAlphaNumeric VARCHAR(256) 
    ) 
    RETURNS VARCHAR(MAX) 
    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 @strAlphaNumeric 
    END 
    GO 

/*For Example,*/ 
SELECT LEN(dbo.udf_GetNumeric('')) 
SELECT LEN(dbo.udf_GetNumeric('[email protected]@@')) 
SELECT LEN(dbo.udf_GetNumeric('123ghdfhdhh456')) 
SELECT LEN(dbo.udf_GetNumeric(NULL)) 

SELECT LEN (dbo.udf_GetNumeric (description)) AS num_count FROM messages;

+0

Cela semble beaucoup de code. Que pensez-vous de la longueur (regexp_replace (ticker, '[0-0-9]', '', 'g')) –

+0

cela ressemble à la syntaxe 'sql server', pas' postgresql' –

+0

'regexp_replace' n'est pas un standard reconnu nom de la fonction intégrée. J'ai eu cette erreur. en utilisant regexp_replace dans sql server 2012 – Guna