Toon posts:

[SQL] instr max/min last/first?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een database waar XML Clob's in staan.
Vanuit deze grote lap tekst in een cel wil ik een paar velden hebben.
Tot nu toe heb ik alles kunnen doen m.b.v. substr en instr.
In deze xml file zitten meerdere timestamps. Ik ben op zoek naar de 1e timstamp en naar de laatste timestamp (verschil = doorlooptijd). Het lukt me alleen niet om dit voor elkaar te krijgen.

De query die ik nu heb.(Hierbij is er nog geen verschil tussen first en last timestamp):

select Runlog_id,
substr(RUNLOG.Journal_content,
instr (RUNLOG.Journal_content,'<TimeStamp>')-1+length('<TimeStamp>')+1,
instr(RUNLOG.Journal_content,'</TimeStamp>')-
(instr(RUNLOG.Journal_content,'<TimeStamp>')-1+length('<TimeStamp>')+1)
)
AS FirstTimestamp,
substr(RUNLOG.Journal_content,
instr (RUNLOG.Journal_content,'<TimeStamp>')-1+length('<TimeStamp>')+1,
instr(RUNLOG.Journal_content,'</TimeStamp>')-
(instr(RUNLOG.Journal_content,'<TimeStamp>')-1+length('<TimeStamp>')+1)
)
AS LastTimestamp
FROM RUNLOG
Where Runlog_ID in ('1','2','3')

Iemand een idee?

  • Glabbeek
  • Registratie: Februari 2001
  • Laatst online: 09:43

Glabbeek

Dat dus.

Het is niet direct een antwoord op je vraag, maar is het niet handiger om de verschillende velden in de XML-fragmenten gewoon in verschillende kolommen in je database-table te zetten? Een XML file kan je namelijk ook als een database zien, waar het dat het in plain leesbare tekst wordt opgeslagen. Wat is het nut om dit dan exact zo in de database te zetten als je eigenlijk alleen geinteresseerd bent in de losse velden in de XML file?

Als je zelf geen zeggenschap hebt over wat in de database staat heb ik niets gezegd :)

En zo is het maar net.


Verwijderd

Topicstarter
Helaas heb ik in dit geval geen zeggenschap over hoe de database eruit ziet..

Ik heb van een collegea nog de volgende tip gekregen. Ga ik zo even mee aan de slag:

Met de functie Instr kan je ook van achteraan gaan zoeken.

INSTR(char1, char2 [,n [,m]])
Searches Char1 beginning with its Nth character for the Mth occurrence of Char2 and returns the position of the character in Char1 that is the first character of this occurrence.
If N is negative, Oracle counts and searches backward from the end of Char1. N and M default to 1.


De n en m parameters zijn optioneel, maar als je n= -1 maakt, dan zoekt hij vanaf het einde van het veld.

hopelijk gaat het hiermee lukken...

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dit is een een verschrikkelijk ontwerp inderdaad. Je gaat hier waarschijnlijk nog veel meer problemen mee krijgen. Je hebt al problemen bij een eenvoudige select. Hoe denk je een update te gaan doen? Daarnaast kan er geen gebruik gemaakt worden van een index op het veld en moet je stringfuncties op het veld gaan toepassen. Beide zaken zijn erg slecht voor de performance.

Nofi naar jou, maar misschien heb je nu wat argumenten voor een andere database opzet, als je datamodel nl. niet goed is blijf je problemen houden.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Zijn regular expressions niet makkelijker om op zoek te gaan naar strings ?

Verwijderd

Topicstarter
Ik heb voor elkaar gekregen wat ik wilde bereiken.
Het betreft een applicatie die xml verzoeken uitstuurd naar verschillende externe partners en ook in de vorm van een xml string een reactie terug krijgt.
In de tabel die ik gebuik is zowel het request, de response en een journal te vinden. De inhoud van deze strings is niet op een andere manier in de database opgeslagen.

Maar goed.. mijn laatste uitdaging is opgelost. Ik weet zeker dat ik nog tegen meer problemen aan ga lopen, maar daar vinden we dan ook wel weer een oplossing voor!
Bedankt!
PM.
Pagina: 1