ArcMap에서 밑줄 문자를 쿼리 하시겠습니까?


10

Oracle 기반 ArcSDE 기능 클래스에 대한 표준 LIKE 쿼리의 경우 밑줄 문자는 문자열과 함께 사용될 때 단일 문자 와일드 카드를 나타냅니다.

정확히 4 자리 숫자로 시작하고 밑줄 문자가 오는 텍스트 문자열을 찾기 위해 정의 쿼리를 적용하려고합니다.

누구든지 쿼리에서 밑줄 문자를 어떻게 지정하는지 또는 이스케이프 문자가 무엇인지 / 알 수 있습니까?

MDHald의 답변 은 파일 지오 데이터베이스에 적용되지만 필자의 경우는 Oracle에만 해당됩니다. 이 경우 ArcSDE와 파일 지오 데이터베이스 쿼리가 동일하게 작동 할 것이라고 거짓으로 가정했습니다.


이스케이프 문자는 일반적으로 백 슬래시 \ 입니다. Oracle에서도 마찬가지 \_입니다. 따라서 밑줄을 검색 할 때 찾아보고 싶을 것 입니다.
Midavalo

@ Midavalo, 그것이 가장 먼저 떠 올랐습니다. 내 쿼리는 CABLE = '_____ \ _ %'였으며 결과는 0이었습니다.
Eok

당신이 사용해야 할 수도 있습니다 LIKE(질문에서 LIKE를 언급하더라도)- CABLE LIKE '____\_%'. 나는 SQL 서버를 사용하고 있지만, 나는 그렇게 다른 결과를 얻을 수 있습니다 아니라 오라클보다 여기에 연극을해야합니다
Midavalo

1
ArcGIS에서 사용되는 쿼리 표현식에 대한 SQL 참조를 사용해보십시오. CABLE LIKE '____\_%' ESCAPE '\'데스크탑 도움말
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 [이스케이프 문자]

와일드 카드와 함께 LIKE 연산자 (= 연산자 대신)를 사용하여 부분 문자열 검색을 작성하십시오. 퍼센트 기호 (%)는 그 자리에 하나의 문자, 백 문자 또는 문자 없음이 허용됩니다. 또는 한 문자를 나타내는 와일드 카드를 사용하여 검색하려면 밑줄 (_)을 사용하십시오. 문자가 아닌 데이터에 액세스해야하는 경우 CAST 기능을 사용하십시오. 예를 들어이 쿼리는 정수 필드 SCORE_INT에서 8로 시작하는 숫자를 반환합니다.

'8 %'와 같은 CAST ( 'SCORE_INT'AS VARCHAR)

검색 문자열에 백분율 기호 또는 밑줄을 포함 시키려면 ESCAPE 키워드를 사용하여 다른 문자를 이스케이프 문자로 지정하십시오. 그러면 실제 백분율 기호 또는 밑줄이 바로 뒤에옵니다. 예를 들어이 표현식은 10 % DISCOUNT 또는 A10 %와 같이 10 %를 포함하는 문자열을 반환합니다.

'% 10 $ %%'ESCAPE '$'와 같은 'AMOUNT'


3

이 기능을 사용하려면 CHAR_LENGTH 및 SUBSTRING을 사용해야합니다. 다음과 같이 보일 것입니다 :

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

여기서 yourfieldname = 필드 이름입니다.

그러나 코드에서 ""를 삭제하지 마십시오. 있는 그대로 복사하고 텍스트 yourfieldname 만 바꾸십시오.


귀하의 답변은 파일 지오 데이터베이스에 효과적이지만 기본 DBMS가 까다로울 것이라는 것을 알지 못했습니다. 오라클은 쿼리를 좋아하지 않습니다.
Eok

Oracle은 [DATABASE]에 약간 까다로워집니다 .. [TABLENAME] 더블 포인트가 필요합니다. 쿼리가 정의로 작동하지 않는 경우 SDE (Oracle에서 가져 오는 경우 하나의 설정이 있다고 가정)에서 항상 뷰를 작성하고 (데이터베이스에서 마우스 오른쪽 단추를 클릭하고 새로 작성>보기 선택을 선택하십시오). 비슷한 쿼리.
MDHald

3

이 Q & A를 통해 _특정 텍스트 필드에서 밑줄 ( ) 이 포함 된 레코드로 커서를 제한 할 수있는 ArcPy 검색 커서에서 where 절을 사용할 수없는 이유를 해결하는 데 도움이되었습니다 .

내가 그것을 발견했을 때 나는 이미 문제를 설명하기 위해 코드 스 니펫을 개발 했으므로 그 노력을 낭비하지 않고 솔루션을 추가했으며 지금은 동일한 문제로 미래 방문자를 돕기 위해 여기에 게시하고 있습니다.

이 테스트는 파일 지오 데이터베이스를 사용하며 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.