2014-01-08 3 views
0

Как вернуть все символы из строки и подсчитать ее в sql.возвращает отдельный символ из строки

, если строка "как вы"

он должен вернуть

количество обугленного

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

Почему SQL это делает? SQL не является языком программирования, это программное обеспечение для хранения данных и извлечения данных. То, что вы описали, легко будет решить с помощью кодирования langauge – nrathaus

+0

Это часть моего запроса к базе данных. – SaNa3819

+0

Что делать, если вам нужен запрос, который возвращает все строки, содержащие самые высокие значения буквы «o»? Кажется немного сложным, но все равно может быть интересно. –

ответ

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 
+0

может указать мне выбрать @c = count (*) из #tbl где ch = @ch перед этой строкой только таблица создается так, как это сравнивается ch с @ch? – SaNa3819

+0

Это имя столбца в #tbl. @ch - это всего лишь одна переменная, это другое имя из ch. Итак, это два разных названия двух разных вещей в этом скрипте. –

+0

Я пытаюсь сказать, что изначально таблица пуста. Выберите @c = count (*) из #tbl где ch = @ch , так как мы можем получить от этого значение? – SaNa3819

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; 
Смежные вопросы