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