5

字段中的值如下

<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 [exist()]:没有函数 '{http://www.w3.org/2004/07/xpath-functions}:starts-with()'

谁能帮助我,我想在 SQL 2005 XQuery 中创建 LIKE 运算符的感觉。我是 XQuery 的新手。

4

2 回答 2

13

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

一般来说,starts-with(a, b) 等价于

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

和 end-with(a, b) 等价于

substring(a, string-length(a) - string-length(b)) = b
于 2012-12-11T23:13:26.360 回答
4

这个怎么样:

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

基本上:

  • 获取en-USXML 元素并将其值转换为varchar(50)
  • LIKE然后对该varchar(50)列执行常规、正常的 SQL
于 2011-02-15T06:37:42.453 回答