xQuery LIKE-operator(开头)

时间:2011-02-15 06:16:20

标签: xml sql-server-2005 where-clause sql-like xquery-sql

该字段中的值如下

<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

正在给出错误

  

Msg 2395,Level 16,State 1,Line 1
  XQuery [exist()]:没有函数   '{} http://www.w3.org/2004/07/xpath-functions:开始 - 与()'

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

2 个答案:

答案 0 :(得分: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

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

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

和结束 - (a,b)相当于

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

答案 1 :(得分:4)

这个怎么样:

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

基本上:

  • 抓取en-US XML元素并将其值转换为varchar(50)
  • 然后在LIKE
  • 上执行常规,正常的SQL varchar(50)