Как вернуть все символы из строки и подсчитать ее в sql.возвращает отдельный символ из строки
, если строка "как вы"
он должен вернуть
количество обугленного
2
h 1
o 2
w 1
a 1
r 1
e 1
y 1
u 1
Как вернуть все символы из строки и подсчитать ее в sql.возвращает отдельный символ из строки
, если строка "как вы"
он должен вернуть
количество обугленного
2
h 1
o 2
w 1
a 1
r 1
e 1
y 1
u 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
может указать мне выбрать @c = count (*) из #tbl где ch = @ch перед этой строкой только таблица создается так, как это сравнивается ch с @ch? – SaNa3819
Это имя столбца в #tbl. @ch - это всего лишь одна переменная, это другое имя из ch. Итак, это два разных названия двух разных вещей в этом скрипте. –
Я пытаюсь сказать, что изначально таблица пуста. Выберите @c = count (*) из #tbl где ch = @ch , так как мы можем получить от этого значение? – SaNa3819
Вы можете использовать функцию TSQL клиента см http://gallery.technet.microsoft.com/scriptcenter/T-SQL-Script-to-Split-a-308206f3.
И вы можете сделать запрос, решив свою проблему, используя group by
и count
заявления?
Это вернет результирующий набор, который вы запросили. Он делает это, беря каждую букву и добавляя ее в новую строку во временной таблице, а затем запрашивая результаты, чтобы возвращать счетчики для каждого появления символа.
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 не является языком программирования, это программное обеспечение для хранения данных и извлечения данных. То, что вы описали, легко будет решить с помощью кодирования langauge – nrathaus
Это часть моего запроса к базе данных. – SaNa3819
Что делать, если вам нужен запрос, который возвращает все строки, содержащие самые высокие значения буквы «o»? Кажется немного сложным, но все равно может быть интересно. –