xQuery LIKE-operator(开头)

Har*_*aid 4 xml sql-server-2005 where-clause xquery-sql sql-like

该领域的价值如下

<en-US>Parameter23</en-US>
<it-IT>Parameter</it-IT>
Run Code Online (Sandbox Code Playgroud)

SQL查询是

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

而我正试着这样做

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

是错误的

消息2395,级别16,状态1,行1
的XQuery [存在()]:没有功能'{} http://www.w3.org/2004/07/xpath-functions:开始-与()'

任何人都可以帮助我,我想在SQL 2005 XQuery中创建LIKE运算符的感觉.我是XQuery的新手.

小智 11

starts-with()/ ends-with()可以用substring()和string-length()函数的组合代替:

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

一般来说,开始时(a,b)相当于

substring(a, 1, string-length(b)) = b
Run Code Online (Sandbox Code Playgroud)

和(a,b)相当于

substring(a, string-length(a) - string-length(b)) = b
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 4

这个怎么样:

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

基本上:

  • 获取en-USXML 元素并将其值转换为varchar(50)
  • LIKE然后对该varchar(50)列执行常规 SQL