ArcMapでアンダースコア文字をクエリしますか?


10

OracleベースのArcSDEフィーチャクラスに対する標準のLIKEクエリの場合、アンダースコア文字は、文字列と一緒に使用すると、1文字のワイルドカードを表します。

私は定義クエリを課して、4桁で始まり、その後にアンダースコア文字が続くテキスト文字列を検索しようとしています。

誰かがクエリでアンダースコア文字自体をどのように指定するのか、またはエスケープ文字が何であるかを知っていますか?

MDHaldの回答はファイルジオデータベースで機能しますが、私のケースはOracleに固有です。この場合、ArcSDEとファイルジオデータベースクエリは同じように機能すると誤って想定されていました。


エスケープ文字は通常バックスラッシュです\ -これはOracleにも当てはまると思うので\_、アンダースコアを検索する場合は検索する必要があります。
ミダバロ

@Midavalo、それが最初に頭に浮かんだことです。私のクエリはCABLE = '_____ \ _%'で、結果は0でした。
2016

あなたは使用する必要があるかもしれませんLIKE(あなたはあなたの質問でLIKEを言及しますが)- CABLE LIKE '____\_%'。OracleではなくSQL Serverを使用しているので、ここで遊びます。異なる結果が得られる可能性があります
Midavalo

1
試行CABLE LIKE '____\_%' ESCAPE '\'
-ArcGISで

1
@Midavalo、あなたがやった直後にまったく同じものを見つけた
Eok

回答:


7

答えを追跡することに成功しました。

次のようなクエリでESCAPE文字を指定できます。

MY_FIELD LIKE '____ $ _%' ESCAPE '$'

これにより、正確に4文字が検索され、その後に下線文字とその後の文字が検索されます。

このページにドキュメントが見つかりました:http : //desktop.arcgis.com/en/arcmap/10.3/map/working-with-layers/sql-reference-for-query-expressions-used-in-arcgis.htm

どれくらい前のバージョンか、これが有効なバージョンはわかりませんが、ArcGIS Desktop 10.3で機能します。

ドキュメントからの抜粋:

x [NOT] LIKE y [ESCAPE 'エスケープ文字']

(=演算子の代わりに)LIKE演算子をワイルドカードと共に使用して、部分的な文字列検索を作成します。パーセント記号(%)は、その場所で何でも受け入れられることを意味します。1文字、100文字、または文字なし。または、1文字を表すワイルドカードを使用して検索する場合は、アンダースコア(_)を使用します。文字以外のデータにアクセスする必要がある場合は、CAST関数を使用します。たとえば、次のクエリは整数フィールドSCORE_INTから8で始まる数値を返します。

CAST( "SCORE_INT" AS VARCHAR)LIKE '8%'

パーセント記号またはアンダースコアを検索文字列に含めるには、ESCAPEキーワードを使用して別の文字をエスケープ文字として指定します。これは、実際のパーセント記号またはアンダースコアが直後に続くことを示します。たとえば、次の式は、10%DISCOUNTやA10%など、10%を含む文字列を返します。

"金額" LIKE '%10 $ %%' ESCAPE '$'


3

これを機能させるには、CHAR_LENGTHとSUBSTRINGを使用する必要があります。次のようになります。

CHAR_LENGTH ("yourfieldname") =5 AND SUBSTRING("yourfieldname", 1, 4) <> '_'

ここで、yourfieldname =フィールドの名前。

ただし、コード内の「」は削除しないでください。そのままコピーして、テキストyourfieldnameのみを置き換えます。


あなたの答えはファイルジオデータベースで機能しますが、基になるDBMSが非常にうるさいことを知りませんでした。Oracleはクエリを好みません。
2016

Oracleは、[DATABASE] .. [TABLENAME]で少しトリッキーになりますが、これらの2つのポイントが必要です。クエリが定義として機能しない場合は、常にSDEにビューを作成し(データベースで右クリック> [新規作成]> [ビューを選択]>)、Oracleからプルしている場合は1つの設定があると想定して、次のように記述します。同様のクエリ。
MDHald 2016

3

ArcQy検索カーソルでwhere句を使用できず_、特定のテキストフィールドにアンダースコア()が含まれているレコードのみにカーソルを制限できる理由を解決するのに役立つこのQ&Aを見つけました。

私がそれを見つけたとき、私は問題を説明するためのコードスニペットをすでに開発していたので、その労力を無駄にするのではなく、解決策を追加し、同じ問題を持つ将来の訪問者を助けるためにここに投稿しています。

テストはファイルジオデータベースを使用し、ArcGIS 10.2.2 for Desktopで実行されました。

import arcpy

arcpy.CreateFileGDB_management(r"C:\Temp","test.gdb")
arcpy.CreateFeatureclass_management(r"C:\Temp\test.gdb","testFC")
arcpy.AddField_management(r"C:\Temp\test.gdb\testFC","testField","Text")
cursor = arcpy.da.InsertCursor(r"C:\Temp\test.gdb\testFC",["testField"])
cursor.insertRow(["ABCD"])
cursor.insertRow(["A_CD"])
cursor.insertRow(["XYZ"])
cursor.insertRow(["X_Z"])
del cursor

where_clause = "testField LIKE '%C%'"
print("Using where_clause of {0} to limit search cursor to print any values containing the letter C:".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
    for row in cursor:
        print(row[0])
print("This is the expected result :-)")

where_clause = "testField LIKE '%_%'"
print("\nUsing where_clause of {0} to limit search cursor to print any values containing an underscore (_):".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
    for row in cursor:
        print(row[0])
print("This is not what I was hoping for :-(")

where_clause = "testField LIKE '%$_%' ESCAPE '$'"
print("\nUsing where_clause of {0} to limit search cursor to print any values containing an underscore (_):".format(where_clause))
with arcpy.da.SearchCursor(r"C:\Temp\test.gdb\testFC",["testField"],where_clause) as cursor:
    for row in cursor:
        print(row[0])
print("This is what I was hoping for :-)")

出力は次のとおりです。

>>> 
Using where_clause of testField LIKE '%C%' to limit search cursor to print any values containing the letter C:
ABCD
A_CD
This is the expected result :-)

Using where_clause of testField LIKE '%_%' to limit search cursor to print any values containing an underscore (_):
ABCD
A_CD
XYZ
X_Z
This is not what I was hoping for :-(

Using where_clause of testField LIKE '%$_%' ESCAPE '$' to limit search cursor to print any values containing an underscore (_):
A_CD
X_Z
This is what I was hoping for :-)
>>> 

1
ありがとうございます。「特殊な」文字の回避策と構文に多くの時間を費やしてください。次に次回登場するときに、どこにあるかを覚えておきたいと思います。
Mike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.