Sql 从字符串中返回单独的字符

Sql 从字符串中返回单独的字符,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,如何返回字符串中的所有字符并在sql中对其进行计数 如果字符串是,你怎么样 它应该会回来 焦数 2 h 1 o 2 w 1 a 1 r 1 e 1 y 1 u 1 您可以使用customer tsql函数,请参阅 您可以使用group by和count语句进行查询以解决问题。您可以使用此脚本。它会给你你所需要的。 这个只计算字符串中的字母 declare @c int declare @ch varchar(10) declare @str varch

如何返回字符串中的所有字符并在sql中对其进行计数

如果字符串是,你怎么样

它应该会回来

焦数

    2
h   1
o   2
w   1
a   1
r   1
e   1
y   1
u   1

您可以使用customer tsql函数,请参阅


您可以使用group by和count语句进行查询以解决问题。

您可以使用此脚本。它会给你你所需要的。 这个只计算字符串中的字母

declare @c int
declare @ch varchar(10) 
declare @str varchar(max)
set @str = 'how are you'
declare @letter int 

declare @i int 
set @i = 1
create table #tbl(ch varchar(10), cnt int)

while (@i <= len(@str))
begin
   set @letter = 0
   set @ch = substring(@str, @i, 1)

   select @c = count(*) from #tbl 
   where ch = @ch 

   if ( (@ch >= 'a' and @ch <= 'z') or (@ch >= 'A' and @ch <= 'Z') )
   begin
      set @letter = 1
   end 

   if (@c = 0)
   begin
       if (@letter = 1)
       begin
           insert into #tbl (ch, cnt) values (@ch, 1)
       end
   end
   else
   begin
       update #tbl set cnt = cnt + 1 where ch = @ch
   end

   set @i = @i + 1

end


select * from #tbl 
drop table #tbl 
如果你想数一数所有的字符而不仅仅是字母, 这就更容易了。使用此脚本

declare @c int
declare @ch varchar(10) 
declare @str varchar(max)
set @str = 'how are you'

declare @i int 
set @i = 1
create table #tbl(ch varchar(10), cnt int)

while (@i <= len(@str))
begin
   set @ch = substring(@str, @i, 1)

   select @c = count(*) from #tbl 
   where ch = @ch 

   if (@c = 0)
   begin
       insert into #tbl (ch, cnt) values (@ch, 1)
   end
   else
   begin
       update #tbl set cnt = cnt + 1 where ch = @ch
   end

   set @i = @i + 1

end


select * from #tbl 
drop table #tbl 

这将返回您请求的结果集。它通过获取每个字母并将其添加到临时表中的新行,然后查询结果以返回字符每次出现的计数来完成此操作

DECLARE @individual CHAR(1);

DECLARE @text NVARCHAR(200)
SET @text = 'how are you';

IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL
    DROP TABLE #tmpTable

CREATE TABLE #tmpTable (letter char(1));

WHILE LEN(@text) > 0
BEGIN       
    SET @individual = SUBSTRING(@text, 1, 2)
    INSERT INTO #tmpTable (letter) VALUES (@individual);

    SET @text = SUBSTRING(@text, 2, LEN(@text))
END

SELECT letter, COUNT(*) AS [count]
FROM #tmpTable
GROUP BY letter;

SQL为什么要这样做?SQL不是一种编程语言,它是一种数据存储和数据检索软件。您所描述的内容可以通过编码语言轻松解决。这是我数据库查询的一部分。如果您需要返回包含字母“o”最高出现次数的所有行的查询,该怎么办?看起来有点复杂,但仍然很有趣。他在问,把字符串分解成它的组件,在我的原始字符串中寻找这个组件,返回数字。这不是SQL,这太疯狂了:}它将返回升序Oreder中字符串中的字符。你可以告诉我从tbl中选择@c=count*,其中ch=@ch在这一行之前,只创建了表,因此如何将ch与@ch进行比较?ch是tbl中的列名。@ch只是一个变量,它的名称与ch不同。因此,在这个脚本中,这是两个不同事物的两个不同名称。我试图说最初表是空的。从tbl中选择@c=count*,其中ch=@ch,那么我们如何从中获得值?对,但我随后检查@c是否为0,如果是,我在tbl中插入一行。如果@c不是零,我会更新我们所使用的特定字符的现有行。