Avatar billede hojgaard Nybegynder
13. februar 2004 - 14:20 Der er 2 kommentarer og
1 løsning

Splitte streng op

Hej,

Er der ikke en funktion, der kan splitte en streng op?
Jeg har en tekst i en stored procedure, hvor hvert ord i denne streng skal overføres som parameter til en anden SP.

Er det muligt i SQL-T?

Lidt alla:

...
-- Indeholder næste ord, der skal overføres.
DECLARE @ord VARCHAR(100)
-- Indeholder længden af hele teksten
DECLARE @len INT
-- Forsætte så længe der er flere ord
WHILE
BEGIN
    -- Hente næste ord ud fra teksten.
    @ord =
    -- Overføre ordet til SP
    EXEC dbo.AddWord @value=@ord
END
Avatar billede trer Nybegynder
13. februar 2004 - 14:52 #1
nix, der findes ikke en split i T-SQL.  Du kan bygge videre på nedenstående.

create procedure MySplitter(@s varchar(1000))
as
declare @s varchar(1000), @a int
While len(@s)>0 begin
  set @a=charindex(';',@s)
  exec myOwnSp substring(@s,1,@a-1))
  set @s = right(@s,len(@s)-@a)
end
go

Hver lige obs på, at ; er splittegnet og at strengen SKAL slutte med ; for at ovenstående virker.
Avatar billede trer Nybegynder
13. februar 2004 - 14:53 #2
Hov, pinlig kodefejl

create procedure MySplitter(@s varchar(1000))
as
declare @t varchar(1000), @a int
While len(@s)>0 begin
  set @a=charindex(';',@s)
  set @t=substring(@s,1,@a-1))
  exec myOwnSp @t
  set @s = right(@s,len(@s)-@a)
end
go
Avatar billede hojgaard Nybegynder
13. februar 2004 - 15:46 #3
Super... 1000 tak for hjælpen trer!
Jeg fik tilpasset dit eksempel:

CREATE PROCEDURE MySplitter(@content VARCHAR(1000))
AS
DECLARE @ord VARCHAR(1000), @ordpos INT
SET @content = @content + '  '

WHILE LEN(@content) > 0
BEGIN
    -- Returns the starting position of the specified expression in a character string.
    SET @ordpos = CHARINDEX(' ', @content) -1
    -- Returns part of a character, binary, text, or image expression.
    SET @ord = SUBSTRING(@content, 1, @ordpos)
    -- Returns the part of a character string starting a specified number of integer_expression characters from the right.
    SET @content = RIGHT(@content, (LEN(@content) - @ordpos + 1))
    --
    PRINT @ord
END
GO

EXEC MySplitter @content='Dette er en test'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester