Запит на символ підкреслення в ArcMap?


10

Для стандартного запиту LIKE проти класу функцій ArcSDE на базі Oracle, символ підкреслення являє собою підстановку одного символу при використанні з рядком.

Я намагаюся накласти запит на визначення, щоб знайти текстовий рядок, який починається з чотирьох цифр, за якими слідує символ підкреслення.

Хтось знає, як я б вказав сам символ підкреслення у запиті або якщо / яким може бути символ втечі?

Відповідь MDHald працює для файлових баз даних, але мій випадок стосується Oracle. Помилково припускають, що запит ArcSDE і файлу geodatabase буде функціонувати однаково в цьому випадку.


Характер втечі зазвичай є зворотним нахилом \ - я вважаю, що це теж стосується Oracle, тому ви хочете шукати, \_якщо шукаєте підкреслення.
Midavalo

@Midavalo, це було перше, що прийшло в голову. Мій запит був CABLE = '_____ \ _%', який повернув нульові результати.
Eok

вам може знадобитися використовувати LIKE(хоча ви згадуєте LIKE у своєму питанні) - CABLE LIKE '____\_%'. У мене тут буде грати, хоча я використовую SQL Server, а не Oracle, тому можуть отримати різні результати
Midavalo


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 'escape-character']

Скористайтеся оператором LIKE (замість оператора =) за допомогою макіяжів для створення часткового пошуку рядків. Символ відсотків (%) означає, що що-небудь є прийнятним замість нього: один символ, сто символів або жоден символ. Крім того, якщо ви хочете здійснити пошук з підстановкою, яка представляє один символ, використовуйте підкреслення (_). Якщо вам потрібно отримати доступ до нехарактерних даних, використовуйте функцію CAST. Наприклад, цей запит повертає числа, які починаються з 8 з цілого поля SCORE_INT:

CAST ("SCORE_INT" ЯК ВАРХАР) ПОДОБАЄТЬСЯ "8%"

Щоб включити символ відсотка або підкреслення у рядок пошуку, використовуйте ключове слово ESCAPE, щоб позначити інший символ як символ втечі, що, в свою чергу, вказує на те, що відразу слідує реальний знак відсотка або підкреслення. Наприклад, цей вираз повертає будь-яку рядок, що містить 10%, наприклад 10% Знижка або A10%:

"AMOUNT" LIKE '% 10 $ %%' ESCAPE '$'


3

Вам потрібно буде використовувати CHAR_LENGTH та SUBSTRING, щоб це працювало. Це виглядатиме так:

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

де yourfieldname = назва вашого поля.

Не видаляйте "" в коді. Скопіюйте, як є, і замініть лише текст своїм іменем поля.


Ваша відповідь працює для баз даних геоданих, але я не розумів, що базові СУБД будуть настільки вибагливими. Oracle не любить запит.
Eok

Oracle трохи хитрує з [DATABASE] .. [TABLENAME] йому потрібні ці подвійні бали. Якщо запит не працює як визначення, ви завжди можете створити представлення даних (клацніть правою кнопкою миші у вашій базі даних> виберіть Створити> виберіть Перегляд>) у своєму SDE (припускаючи, що у вас є одна установка, якщо ви тягнете з Oracle), а потім випишіть подібний запит.
MDHald

3

Я натрапив на це питання і запитання, які допомогли мені вирішити, чому я не зміг використовувати пункт де на пошуковому курсорі ArcPy, який міг би обмежити курсор лише тими записами, які містили підкреслення ( _) у певному текстовому полі.

До того часу, як я його знайшов, я вже розробив фрагмент коду, щоб проілюструвати проблему, тому, замість того, щоб витрачати ці зусилля, я додав рішення до нього і зараз розміщую його тут, можливо, щоб допомогти майбутньому відвідувачу з тією ж проблемою.

У тесті використовується база даних файлів геоданих і виконувалася в ArcGIS 10.2.2 для 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
Дякую за це ... витрачайте стільки часу на "особливі" обрізки символів та синтаксис .... сподіваюся, я пам'ятаю, де його знайти наступного разу, коли він з'явиться.
Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.