Tôi đã xem qua Hỏi & Đáp này để giúp tôi giải quyết lý do tại sao tôi không thể sử dụng mệnh đề where trên con trỏ tìm kiếm ArcPy có thể giới hạn con trỏ chỉ những bản ghi có dấu gạch dưới ( _
) trong trường văn bản cụ thể.
Vào thời điểm tôi tìm thấy nó, tôi đã phát triển một đoạn mã để minh họa vấn đề, vì vậy, thay vì lãng phí nỗ lực đó, tôi đã thêm giải pháp cho nó và hiện đang đăng nó ở đây để có thể giúp một khách truy cập tương lai gặp vấn đề tương tự.
Thử nghiệm sử dụng cơ sở dữ liệu địa lý tệp và được chạy tại ArcGIS 10.2.2 cho Máy tính để bàn.
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 :-)")
Đầu ra là:
>>>
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 :-)
>>>
\
- Tôi tin rằng đây cũng là trường hợp của Oracle, vì vậy bạn muốn\_
tìm kiếm nếu tìm kiếm dấu gạch dưới.