กำลังค้นหาอักขระขีดล่างใน ArcMap หรือไม่


10

สำหรับเคียวรี LIKE แบบมาตรฐานเทียบกับคลาสฟีเจอร์ ArcSDE ที่ใช้ Oracle อักขระขีดล่างแทนอักขระตัวแทนเดียวเมื่อใช้กับสตริง

ฉันพยายามกำหนดคิวรีคำจำกัดความเพื่อค้นหาสตริงข้อความที่ขึ้นต้นด้วยตัวเลข 4 หลักตามด้วยอักขระขีดล่าง

ไม่มีใครรู้ว่าฉันจะระบุตัวอักษรขีดล่างตัวเองในแบบสอบถามหรือถ้า / สิ่งที่ตัวละครหลบหนีอาจจะ?

คำตอบของ MDHaldทำงานกับฐานข้อมูลไฟล์ทางภูมิศาสตร์แต่กรณีของฉันเฉพาะกับ Oracle สมมติว่า ArcSDE และการสืบค้นฐานข้อมูลไฟล์จะทำหน้าที่เหมือนกันสำหรับกรณีนี้


ตัวละคร Escape มักจะเป็นแบ็กสแลช\ - ฉันเชื่อว่านี่เป็นกรณีของ Oracle ดังนั้นคุณต้องการ\_ค้นหาว่าค้นหาขีดล่างหรือไม่
Midavalo

@ Midavalo นั่นเป็นสิ่งแรกที่นึกได้ ข้อความค้นหาของฉันคือ CABLE = '_____ \ _%' ซึ่งส่งกลับผลลัพธ์เป็นศูนย์
Eok

คุณอาจจำเป็นต้องใช้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 [ไม่] ชอบ y [ESCAPE 'escape-character']

ใช้โอเปอเรเตอร์ LIKE (แทนโอเปอเรเตอร์ =) ด้วยไวด์การ์ดเพื่อสร้างการค้นหาสตริงบางส่วน สัญลักษณ์เปอร์เซ็นต์ (%) หมายถึงสิ่งใดก็ตามที่ยอมรับได้ในสถานที่: อักขระหนึ่งตัวอักษรร้อยหรือไม่มีอักขระ หรือหากคุณต้องการค้นหาด้วยอักขระตัวแทนที่ใช้แทนอักขระหนึ่งตัวให้ใช้เครื่องหมายขีดล่าง (_) หากคุณต้องการเข้าถึงข้อมูลที่ไม่ใช่อักขระให้ใช้ฟังก์ชัน CAST ตัวอย่างเช่นเคียวรีนี้ส่งคืนตัวเลขที่ขึ้นต้นด้วย 8 จากฟิลด์จำนวนเต็ม SCORE_INT:

นักแสดง ("SCORE_INT" เป็น VARCHAR) เหมือน '8%'

ในการรวมสัญลักษณ์เปอร์เซ็นต์หรือขีดล่างในสตริงการค้นหาของคุณให้ใช้คีย์เวิร์ด ESCAPE เพื่อกำหนดอักขระอื่นเป็นอักขระ escape ซึ่งในทางกลับกันจะระบุว่าเครื่องหมายเปอร์เซ็นต์จริงหรือขีดล่างตามมาทันที ตัวอย่างเช่นนิพจน์นี้ส่งคืนสตริงที่มี 10% เช่น 10% DISCOUNT หรือ A10%:

"AMOUNT" ชอบ '% 10 $ %%' ESCAPE '$'


3

คุณจะต้องจ้าง CHAR_LENGTH และ SUBSTRING เพื่อให้สามารถใช้งานได้ มันจะมีลักษณะดังนี้:

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

โดยที่ yourfieldname = ชื่อของฟิลด์ของคุณ

อย่าลบ "" ในรหัสแม้ว่า คัดลอกตามที่เป็นและแทนที่ข้อความ yourfield ชื่อเท่านั้น


คำตอบของคุณทำงานกับฐานข้อมูลไฟล์ทางภูมิศาสตร์ แต่ฉันไม่ทราบว่า DBMS พื้นฐานจะพิถีพิถันมาก Oracle ไม่ชอบคำค้นหา
Eok

Oracle มีความยุ่งยากเล็กน้อยกับ [DATABASE] .. [TABLENAME] ต้องการจุดสองจุดเหล่านั้น หากแบบสอบถามไม่ทำงานตามคำจำกัดความคุณสามารถสร้างมุมมอง (คลิกขวาในฐานข้อมูลของคุณ> เลือกใหม่> เลือกมุมมอง>) ใน SDE ของคุณ (สมมติว่าคุณมีการตั้งค่าหนึ่งถ้าคุณดึงจาก Oracle) แล้วเขียนออกมา ข้อความค้นหาที่คล้ายกัน
MDHald

3

ฉันเจอคำถาม & คำตอบนี้ซึ่งช่วยฉันแก้ปัญหาว่าทำไมฉันจึงไม่สามารถใช้ส่วนคำสั่งบนเคอร์เซอร์ค้นหา ArcPy ซึ่งสามารถ จำกัด เคอร์เซอร์เฉพาะระเบียนที่มีขีดล่าง ( _) ในฟิลด์ข้อความเฉพาะ

ตามเวลาที่ฉันพบว่าฉันได้พัฒนาโค้ดขนาดเล็กเพื่อแสดงปัญหาดังนั้นแทนที่จะเสียความพยายามฉันได้เพิ่มวิธีแก้ไขปัญหาและตอนนี้ฉันโพสต์ไว้ที่นี่เพื่อช่วยผู้เยี่ยมชมในอนาคตด้วยปัญหาเดียวกัน

การทดสอบใช้ฐานข้อมูลไฟล์และเรียกใช้ที่ ArcGIS 10.2.2 สำหรับเดสก์ท็อป

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.