xQuery LIKE-оператор (начинается с) - PullRequest
4 голосов
/ 15 февраля 2011

Значение в поле выглядит следующим образом

<en-US>Parameter23</en-US>
<it-IT>Parameter</it-IT>

SQL-запрос

select * 
from parametermaster 
where cast(ParameterName as xml).exist('en-US/text()[contains(.,"P")]') = 1

И я пытаюсь, как

select * 
from parametermaster 
where cast(ParameterName as xml).exist('en-US/text()[starts-with(.,"P")]') = 1

Это даетошибка как

Сообщение 2395, Уровень 16, Состояние 1, Строка 1
XQuery [существует ()]: нет функции '{http://www.w3.org/2004/07/xpath-functions}:starts-with()'

Может кто-нибудь помочьпожалуйста, я хочу создать ощущение оператора LIKE в SQL 2005 XQuery.И я новичок в XQuery.

Ответы [ 2 ]

11 голосов
/ 12 декабря 2012

начинается с () / заканчивается с () может быть заменено комбинациями функций substring () и string-length ():

select * 
from parametermaster 
where cast(ParameterName as xml).exist('en-US/text()[substring(., 1, string-length("P")) = "P"]') = 1

В общем случае начинается с (a, b) эквивалентно

substring(a, 1, string-length(b)) = b

и оканчивается на (a, b) эквивалентно

substring(a, string-length(a) - string-length(b)) = b
4 голосов
/ 15 февраля 2011

Как насчет этого:

select * 
from parametermaster 
where cast(ParameterName as xml).value("(en-US)[1]", "varchar(50)") LIKE 'P%'

В основном:

  • захватывает XML-элемент en-US и преобразует его значение в varchar(50)
  • затем выполните обычный, нормальный SQL LIKE для этого varchar(50) столбца
...