从字符串返回单独的字符

时间:2014-01-08 10:36:32

标签: sql sql-server-2008-r2

如何从字符串中返回所有字符并在sql中计算。

如果字符串是“你好吗”

它应该返回

字数

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

3 个答案:

答案 0 :(得分:1)

您可以使用此脚本。它将为您提供您所需要的。 这个只计算字符串中的字母。

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 

答案 1 :(得分:0)

您可以使用客户tsql函数,请参阅http://gallery.technet.microsoft.com/scriptcenter/T-SQL-Script-to-Split-a-308206f3

您可以使用group bycount声明来查询问题吗?

答案 2 :(得分:0)

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

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;