计算字符串中的数字字符数

时间:2018-03-23 12:56:47

标签: sql sql-server tsql

使用tsql我想计算字符串中的数字字符。例如,我已经获得了“kick0my234ass”和“#0;字符串,我想计算该字符串中有多少(在该示例中为4)数字。我不能使用正则表达式,只是简单的tslq。

6 个答案:

答案 0 :(得分:1)

首先必须将字符串拆分为单个字符,评估哪些是数字,最后计算那些字符串。这样就可以了:

DECLARE @test  TABLE (Example NVARCHAR(255))

INSERT @test 
VALUES ('kick0my234ass')

SELECT  COUNT(1)
FROM    @test AS T
INNER JOIN master..spt_values v
        ON  v.type = 'P'
        AND v.number < len(T.Example)
WHERE   SUBSTRING(T.Example, v.number + 1, 1) LIKE '[0-9]'

答案 1 :(得分:1)

你可以这样做我想:

declare @c varchar(30)

set @c = 'kick0my234ass'

select @c, len(replace(@c,' ','')) - len(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@c,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9',''),' ',''))

答案 2 :(得分:0)

使用rCTE创建的Tally Table:

CREATE TABLE #Sample (S varchar(100));
INSERT INTO #Sample
VALUES ('kick0my234 ass');
GO
WITH Tally AS(
    SELECT 1 AS N
    UNION ALL
    SELECT N + 1
    FROM Tally
    WHERE N + 1 <= 100)
SELECT S.S, SUM(CASE WHEN SUBSTRING(S,T.N, 1) LIKE '[0-9]' THEN 1 ELSE 0 END) AS Numbers
FROM #Sample S
     JOIN Tally T ON LEN(S.S) >= T.N
GROUP BY S.S;

为了将来参考,请发布您的拥有尝试。我们(真的)没有为你做你的工作。

答案 3 :(得分:0)

您可以使用正则表达式尝试此解决方案(如果您允许):

它使用递归CTE,在每个递归步骤中,从给定字符串中删除一个数字,并且当字符串中没有数字时条件将停止。行也用连续的NMObject types <<-----> NMTypeObj objects编号,因此最后id是从字符串中删除的数字量。

id

答案 4 :(得分:0)

使用WHILE循环,每个字符都是数字。

<强>查询

declare @text as varchar(max) = 'kick0my234ass';
declare @len as int;
select @len = len(@text);
if(@len > 0)
begin
    declare @i as int = 1;
    declare @count as int = 0;
    while(@i <= @len)
    begin
        if(substring(@text, @i, 1) like '[0-9]')
             set @count += 1;
        set @i += 1;
    end
    print 'Count of Numerics in ' + @text + ' : ' + cast(@count as varchar(100));
end
else
    print 'Empty string';

答案 5 :(得分:0)

如果简单&amp;性能很重要我建议一个纯粹的基于集合的解决方案。获取DigitsOnlyEE的副本,该副本将删除所有非数字字符。然后对输出使用LEN。

DECLARE @string varchar(100) = '123xxx45ff678';

SELECT string = @string, digitsOnly, DigitCount = LEN(digitsOnly)
FROM dbo.DigitsOnlyEE(@string);

<强>结果

string             digitsOnly  DigitCount
------------------ ----------- ------------
123xxx45ff678      12345678    8