1

問題

プロパティにオークのプロパティ インデックスがありますsomePath

以下のように、このプロパティに対して SQL2 クエリを実行すると、結果が得られます。

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] = 'ABC'

ただし、このクエリにバックスラッシュを使用して値を入力すると、メタデータに一致があっても結果が見つかりません。

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  'F:\path\to\somewhere.jpg' 

すべてのコンテンツが正しく索引付けされ、索引が使用されている (Explain Query に表示)

選抜

ESCAPE オペレーター - 失敗

LIKE コマンドから ESCAPE 演算子を使用しようとしましたが、これは単純な等価演算子では機能しません。

バックスラッシュをエスケープする (JCR SQL2) - 失敗

いくつかの暗い jcr sql2 ドキュメント (') で見つけたように、バックスラッシュをエスケープしようとしても、結果が得られません。

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  "F:'\path'\to'\somewhere.jpg" 

バックスラッシュをエスケープする (Java スタイル) - FAILURE

バックスラッシュの Java スタイルをエスケープしようとしても、結果が得られません。

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  'F:\\path\\to\\somewhere.jpg' 

バックスラッシュの URL エンコード - 失敗

文字列に URL エンコーディングを適用しますが、結果はありません:

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  'F:%5Cpath%5Cto%5Csomewhere.jpg'

角かっこを使用して任意の文字をエスケープします - FAILURE

where句の左オペランドのように値を角括弧で囲み、結果はありません(引用符の有無にかかわらず):

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  [F:\path\to\somewhere.jpg]

値を文字列にキャスト - 失敗

値を明示的に文字列にキャストしますが、結果はありません:

select * from [dam:Asset] as d 
where d.[jcr:content/metadata/somePath] =  CAST('F:\path\to\somewhere.jpg' AS STRING)

CONTAINS 演算子を使用する - 回避策

CONTAINS を使用すると、結果は得られますが、可能であればこれを避けたいと考えています。

select * from [dam:Asset] as d 
where ISDESCENDANTNODE(d, '/content/dam') AND CONTAINS(d.* , 'F:\path\to\somewhere.jpg')

SQL2 がバックスラッシュを使用してプロパティ値を処理する方法についてのアイデアはありますか?

4

0 に答える 0