2011-02-09 14 views
5

Esiste un modo per eseguire un'operazione LIKE con XQuery allo stesso modo di SQL?xQuery operatore LIKE?

Non voglio costruire alcuni "startswith", "endswith" e "contiene" -espressioni.

esempio di quello che voglio realizzare:

for $x in /user where $x/firstname LIKE '%xxx' return $x 
for $x in /user where $x/middlename LIKE 'xxx%' return $x 
for $x in /user where $x/lastname LIKE '%xxx%' return $x 

Esiste un modo per raggiungere questo obiettivo in XQuery?

EDIT:

avuto la risposta alla domanda di cui sopra. Nuovo problema:

Ci sarebbe un modo per farlo al contrario? Vorrei eseguire queste query con l'operatore sql equivalente LIKE. È possibile? Deve essere in un FLWOR-espressione

EDIT2:

risolto il problema. È possibile eseguire fn: not (starts-with ('123', '1')) e restituisce false.

+0

Sono perplesso dal vincolo "deve essere in un'espressione FLWOR". Cosa c'è di sbagliato nella formulazione più semplice '/ user [matches (firstname, '. * Xxx')]'? Le espressioni di percorso semplici sono spesso più concise rispetto alle espressioni FLWOR. –

+0

Questa è una domanda utile, a cui sembravi rispondere, ma che non ha fornito l'output. Puoi pubblicare le tue risposte qui per favore? Sei riuscito a utilizzare la sintassi della stringa di comparazione LIKE o hai dovuto tradurla in una stringa di confronto specifica xQuery? – Ben

risposta

13

XPath 2.0 e XQuery 1.0 (come standardizzato dal W3C) ha il supporto espressioni regolari con la matches funzione http://www.w3.org/TR/xpath-functions/#func-matches:

/user[matches(firstname, 'xxx$')] 

E naturalmente ci sono funzioni come starts-with e contains (sia in XPath 1.0/2.0) e ends-with (solo in XPath 2.0) che potrebbero essere sufficienti.

+0

Questo risolve il problema. –

+0

@Martin Honnen: +1 buona risposta. Modificato perché l'ultima frase potrebbe essere fonte di confusione. –

+3

XPath 1.0 equivalente della funzione XPath 2.0 'ends-with':' sottostringa ($ stringa, lunghezza stringa ($ stringa) - lunghezza stringa ($ modello) + 1) = $ modello' –