ArcMap में अंडरस्कोर चरित्र के लिए क्वेरी?


10

Oracle-आधारित ArcSDE सुविधा वर्ग के खिलाफ एक मानक LIKE क्वेरी के लिए, अंडरस्कोर वर्ण एकल वर्ण वाइल्डकार्ड का प्रतिनिधित्व करता है, जब इसे एक स्ट्रिंग के साथ प्रयोग किया जाता है।

मैं एक टेक्स्ट स्ट्रिंग को खोजने के लिए एक परिभाषा क्वेरी लगाने की कोशिश कर रहा हूं जो 4 अंकों से शुरू होता है और इसके बाद एक अंडरस्कोर वर्ण होता है।

क्या किसी को पता है कि मैं एक क्वेरी में ही अंडरस्कोर चरित्र को कैसे निर्दिष्ट करूंगा या यदि / क्या बच चरित्र हो सकता है?

MDHald का जवाब फ़ाइल जियोडैट डेटाबेस के लिए काम करता है लेकिन मेरा मामला ओरेकल के लिए विशिष्ट है। झूठा यह माना जाता है कि आर्कएसडीई और जियोडेटाबेस क्वेरी फ़ाइल इस मामले के लिए समान कार्य करेगी।


पलायन चरित्र आमतौर पर एक बैकस्लैश है \ - मेरा मानना ​​है कि यह ओरेकल के साथ भी है, इसलिए यदि आप \_अंडरस्कोर की तलाश कर रहे हैं तो आप इसे देखना चाहेंगे ।
Midavalo

@ मिदावलो, वह पहली चीज़ थी जो दिमाग में आई। मेरी क्वेरी CABLE = '_____ \ _%' थी, जिसने शून्य परिणाम लौटाए।
21

आपको उपयोग करने की आवश्यकता हो सकती है LIKE(हालाँकि आप अपने प्रश्न में LIKE का उल्लेख करते हैं) - CABLE LIKE '____\_%'। मैं एक नाटक यहाँ हालांकि मैं एसक्यूएल सर्वर का उपयोग कर रहा बल्कि ओरेकल से बहुत अलग परिणाम मिल सकते हैं होगा
Midavalo


1
@ मिदावलो, आपके द्वारा किए जाने के ठीक बाद एक ही चीज़ पाई गई
21

जवाबों:


7

जवाब ट्रैक करने के लिए प्रबंधित।

आप इस तरह के रूप में एक ESCAPE चरित्र निर्दिष्ट कर सकते हैं:

MY_FIELD को '____ $ _%' ESCAPE '$'

यह ठीक 4 वर्णों के लिए खोज करेगा जिसके बाद एक अंडरस्कोर वर्ण और उसके बाद कुछ और होगा।

इस पृष्ठ पर प्रलेखन मिला: http://desktop.arcgis.com/en/arcmap/10.3/map/working-with-layers/sql-reference-for-query-expressions-used-in-aragg.htm

यह सुनिश्चित नहीं है कि यह कितनी दूर या किस संस्करण के लिए मान्य है लेकिन यह आर्कगिस डेस्कटॉप 10.3 के लिए काम करता है।

प्रलेखन से उद्धरण:

x [NOT] LIKE y [ESCAPE 'एस्केप-कैरेक्टर']

आंशिक स्ट्रिंग खोज बनाने के लिए वाइल्डकार्ड के साथ LIKE ऑपरेटर (= ऑपरेटर के बजाय) का उपयोग करें। प्रतिशत प्रतीक (%) का अर्थ है कि कुछ भी अपनी जगह पर स्वीकार्य है: एक चरित्र, सौ वर्ण या कोई वर्ण। वैकल्पिक रूप से, यदि आप वाइल्डकार्ड के साथ खोजना चाहते हैं जो एक वर्ण का प्रतिनिधित्व करता है, तो एक अंडरस्कोर (_) का उपयोग करें। यदि आपको गैर-अंश डेटा तक पहुंचने की आवश्यकता है, तो CAST फ़ंक्शन का उपयोग करें। उदाहरण के लिए, यह क्वेरी पूर्णांक फ़ील्ड SCORE_INT से 8 से शुरू होने वाली संख्या लौटाती है:

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

अपने खोज स्ट्रिंग में प्रतिशत प्रतीक या अंडरस्कोर को शामिल करने के लिए, एस्केप कैरेक्टर के रूप में किसी अन्य वर्ण को नामित करने के लिए ESCAPE कीवर्ड का उपयोग करें, जो बदले में इंगित करता है कि वास्तविक प्रतिशत संकेत या अंडरस्कोर तुरंत अनुसरण करता है। उदाहरण के लिए, यह अभिव्यक्ति 10% वाले किसी भी स्ट्रिंग को लौटाती है, जैसे 10% DISCOUNT या A10%:

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


3

काम करने के लिए आपको CHAR_LENGTH और SUBSTRING को नियोजित करना होगा। यह इस प्रकार दिखेगा:

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

जहाँ आपका फ़ील्ड नाम = आपके क्षेत्र का नाम।

हालांकि कोड में "" हटाएं नहीं। के रूप में कॉपी करें और केवल टेक्स्ट को अपने फ़ील्ड नाम से बदलें।


आपका जवाब फ़ाइल जियोडैट डेटाबेस के लिए काम करता है, लेकिन मुझे यह महसूस नहीं हुआ कि अंतर्निहित DBMS इतनी चुस्त होगी। Oracle क्वेरी पसंद नहीं करता है।
ईक

Oracle [DATABASE] .. [TABLENAME] के साथ थोड़ा मुश्किल हो जाता है, इसके लिए उन दोहरे बिंदुओं की आवश्यकता होती है। यदि क्वेरी एक परिभाषा के रूप में काम नहीं करती है, तो आप हमेशा अपने एसडीई में एक दृश्य (अपने डेटाबेस में दायाँ क्लिक करें> नया> चुनें दृश्य> का चयन करें) बना सकते हैं (मान लें कि आपके पास एक सेटअप है यदि आप Oracle से खींच रहे हैं) और फिर लिखें एक समान क्वेरी।
एमडीहेल

3

मैं इस प्रश्नोत्तर में आया जिसने मुझे यह हल करने में मदद की कि क्यों मैं एक आर्कपी खोज कर्सर पर एक खंड का उपयोग करने में असमर्थ था, जो कर्सर को केवल उन रिकॉर्डों तक सीमित कर सकता है जिसमें _एक विशेष पाठ क्षेत्र में अंडरस्कोर ( ) शामिल था।

जब तक मुझे यह पता चला कि मैंने पहले से ही समस्या का वर्णन करने के लिए एक कोड स्निपेट विकसित कर लिया है, तो उस प्रयास को बर्बाद करने के बजाय, मैंने इसका समाधान जोड़ दिया है और अब इसे यहाँ पोस्ट कर रहा हूँ, शायद इसी समस्या के साथ भविष्य के आगंतुक की मदद कर सके।

परीक्षण एक फ़ाइल जियोडैटेबेस का उपयोग करता है और डेस्कटॉप के लिए 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
इसके लिए धन्यवाद ... "विशेष" चरित्र वर्कअराउंड और सिंटैक्स पर इतना समय बर्बाद करना .... उम्मीद है कि मुझे याद है कि अगली बार आने पर इसे कहां मिलेगा।
माइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.