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()'

誰か助けてくれませんか。SQL2005XQueryでLIKE演算子の感覚を作りたいです。そして、私はXQueryの初心者です。

4

2 に答える 2

13

start-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

そしてends-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%'

基本的に:

  • XML要素を取得en-USし、その値をに変換しますvarchar(50)
  • LIKE次に、そのvarchar(50)列で通常の通常のSQLを実行します
于 2011-02-15T06:37:42.453 に答える