[MSSQL] select karakters uit een varchar

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Hey folks, ik heb een probleempje met MSSQL. Ik wil nml een select doen uit een karakter (varchar in dit geval) veld. Wat precies? Stel, ik heb één veld met de volgende inhoud:
code:
1
2
3
Hallo dit is inhoud
blonde del
mooie haren

en daarvan wil ik dit selecteren, in aparte records:
  • Hallo dit is inhoud
  • char(13) char(10)
  • blonde del
  • char(13) char(10)
  • mooie haren
Het lullige is dat het moet in een sql-query passen, het mag niet met client-side code, en liever ook niet met een stored procedure. Waarom? Omdat ik een XML-document wil genereren, en dan kun je alleen de XML-functionaliteit uit MSSQL gebruiken en geen eigen code.

Weet iemand een oplossing of kan iemand me in de juiste richting helpen? Tnx.

日本!🎌


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Op maandag 01 juli 2002 10:32 schreef _Thanatos_ het volgende:
en liever ook niet met een stored procedure
Waarom niet? Met substring, charindex en een temptable is denk ik wel wat te verzinnen, maar als je het niet in een stored proc wilt hebben wordt het denk ik al wat moeilijker.
Ik vraag me alleen af waarom je het per se op die manier wilt hebben.

Exact expert nodig?


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
nouja, ik gebruik de "for xml explicit" clause, dus ik kan geen stored procedures gaan aanroepen, zonder het hele systeem wat ik al heb om te gaan gooien. Daarom kan ik ook geen client-side code gebruiken.

日本!🎌


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Hmm dus je wilt dat in de query
select * from tabelletje where voorwaarde=true (en dan als xml result...)
MSSQL zelf in ieder gevonden record dat veld opsplitst en meerdere records teruggeeft?
Succes. Ik zou het megastoer vinden als dat in 1 query te bakken is maar ik heb een flauw voorgevoel dat dat op die manier niet mogelijk is.

Kun je niet in een stored procedure een temptable aanmaken, en dan die temptable als xml terug laten geven?

Exact expert nodig?


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Wat ook te doen is, is een stored procedure die van tevoren aangeroepen wordt en in een temptable al die opgesplitste data zet. en dan in de xml query die spullen weer opvraagt...

is zoiets misschien mogelijk? (heb er geen ervaring mee nml)

日本!🎌


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik heb wat voor mekaar. Ik heb in ieder geval een procedure weten te brouwen om de zaak uit te splistsen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
create table #temp1 (id int, field sysname, chars varchar(1500))

declare vacs_cursor scroll cursor for
select id, functie_eisen from vacatures 

declare @data varchar(1500), @newdata varchar(1500), 
      @id int, @chindex int, @newchindex int
open vacs_cursor
fetch next from vacs_cursor into @id, @data
while @@fetch_status = 0
begin
   set @chindex = 0
   set @newchindex = charindex(char(13) + char(10), @data, @chindex)
   while @newchindex <> 0
   begin
    set @newdata = substring(@data, @chindex, @newchindex - @chindex)
    set @chindex = @newchindex + 2
    if datalength(@newdata) > 0
       insert #temp1 (id, field, chars) 
            values (@id, 'functie_eisen', @newdata)
    insert #temp1 (id, field, chars) 
         values (@id, 'functie_eisen', '<HRt>')
    set @newchindex = charindex(char(13) + char(10), @data, @chindex)
   end
   if @chindex < datalength(@data)
    insert #temp1 (id, field, chars) 
         values (@id, 'functie_eisen', substring(@data, 
                                     @chindex, 
                                     datalength(@data)
                                    - @chindex))
   fetch next from vacs_cursor into @id, @data
end
close vacs_cursor
deallocate vacs_cursor

select * from #temp1

drop table #temp1

Voor degenen die geinteresseerd zijn :P
Nu nog een manier om dat binnen in een sql select-statement aan te roepen...

日本!🎌

Pagina: 1