ArcGIS Online에서는 개발자가 호스팅 피처 레이어를 쿼리할 때 표준화된 SQL 쿼리를 사용해야 합니다. 표준화된 SQL 쿼리를 사용하면 SQL 주입 공격을 방지할 수 있습니다. 모든 ArcGIS 응용프로그램에서는 표준 SQL 쿼리가 지원됩니다.
표준화된 쿼리에 대한 제한 사항
- 표준화된 쿼리는 전체 기관에 적용되며 일부 레이어에 비활성화할 수 없습니다.
- 표준화된 쿼리는 여러 작업공간 사이의 연결부에서 지원되지 않습니다.
- POP_2010 = (SELECT min(POP_2010) FROM counties와 같은 where 절 형태의 서브 쿼리는 지원되지 않습니다.
- 데이터베이스 서비스(예시: Microsoft Azure SQL Database)의 쿼리는 지원되지 않습니다.
ArcGIS Online에서 지원되는 SQL 함수
앱 개발자가 현재 데이터베이스별 where 절 구문을 사용 중이라면 ArcGIS Online에서 지원하는 일반 SQL 구문을 사용하도록 앱 코드의 where 절을 업데이트해야 합니다. 다음 테이블에는 지원되는 SQL 함수와 각각의 구문이 나와 있습니다. 다음 함수와 구문을 앱에서 사용하는 경우 ArcGIS Online에서는 해당 함수와 구문을 피처 레이어에서 사용하는 데이터베이스 사양에 맞게 변환합니다.
날짜 함수
함수 | 설명 |
---|---|
CURRENT_DATE() | UTC 시간의 현재 날짜를 반환합니다. 표시되는 값은 사용 중인 클라이언트에 따라 다릅니다. ArcGIS Online에서 날짜는 기관 또는 프로필의 표준 시간대로 표시됩니다. |
CURRENT_TIME() | 현재 UTC 날짜와 시간(시, 분, 초)을 반환합니다. 표시되는 값은 사용 중인 클라이언트에 따라 다릅니다. ArcGIS Online에서 시간은 기관 또는 프로필의 현지 시간대로 표시됩니다. |
CURRENT_TIMESTAMP() | 현재 UTC 날짜와 시간(시, 분, 초, 밀리초)을 반환합니다. 표시되는 값은 사용 중인 클라이언트에 따라 다릅니다. ArcGIS Online에서 시간은 기관 또는 프로필의 현지 시간대로 표시됩니다. |
EXTRACT(<unit> FROM <date>) | 지정된 <date>의 싱글파트(<unit>)를 반환합니다. 가능한 <unit> 값에는 year, month, day, hour, minute가 포함되지만 이에 국한되지는 않습니다. 다음 예시는 날짜 시간 값 2016-12-21 15:11에서 서로 다른 단위를 추출합니다.
|
숫자 함수
함수 | 설명 |
---|---|
ABS(<number>) | 지정하는 숫자 식의 절대값(양수)을 반환합니다. |
CAST(<number> AS FLOAT | INT) | 숫자를 다른 유형으로 변환합니다. FLOAT는 지정된 숫자를 더블로 변환하고 INT는 정수로 변환합니다. 아래의 첫 번째 예시에서는 숫자가 정수로 변환됩니다. 결과는 정수인 1,424입니다. 두 번째 예시에서는 정수가 실수로 변환되어, 결과는 소수 자릿수가 있는 숫자인 1,424.0입니다.
|
CEILING(<number>) | 지정된 숫자보다 크거나 동일한 가장 작은 정수를 반환합니다. 다음 예시에서는 13을 반환합니다. CEILING(12.93) |
COS(<number>) | <number>의 삼각법 코사인을 반환하며 이는 라디안의 각도로 간주됩니다. |
FLOOR(<number>) | 숫자보다 작거나 동일한 가장 큰 정수를 반환합니다. 다음 예시에서는 12를 반환합니다. FLOOR(12.93) |
LOG(<number>) | 지정된 숫자의 자연 로그를 반환합니다. |
LOG10(<number>) | 지정된 숫자의 기본 -10 로그를 반환합니다. |
MOD(<number>, <n>) | 피제수(<number>)를 제수<n>로 나눈 후 나머지를 반환합니다. <n> 및 <number>는 둘 다 정수여야 합니다. 예시는 다음과 같습니다.
|
NULLIF(<number>, <value>) | 지정한 숫자가 지정된 값과 동일한 경우 null을 반환합니다. NULLIF는 일반적으로 <value>를 0으로 설정하여 0으로 나누기 오류를 방지하는 데 사용됩니다. 계산에서 인수 중 하나에 null 필드 값이 있는 경우 계산 결과는 null이 됩니다. 예를 들어 더블 필드를 계산한다고 가정해 보겠습니다(TOTALPOP을 POP18로 나눔). 어떤 피처에 POP18 값이 0인 경우 계산에는 0으로 나누기 오류가 발생합니다. 필터를 생성하여 POP18이(가) 0인 경우 레코드를 숨긴 다음 계산을 수행할 수 있습니다. 간단한 방법은 NULLIF를 사용하는 것입니다. TOTALPOP / NULLIF(POP18, 0) — POP18이(가) 0이면 null을 반환하고 그렇지 않으면 TOTALPOP / POP18의 값을 반환합니다. |
POWER(<number> , <y>) | 지정한 숫자의 값을 지정된 거듭제곱으로 반환합니다(<y>). 다음 예시에서는 32,768을 반환합니다. POWER(8,5) |
ROUND(<number> , <length>) | 지정된 길이로 지정하는 숫자를 반올림합니다. <length>에 양수를 사용하면 숫자는 소수점의 오른쪽에 있는 소수 자릿수로 반올림됩니다. <length>이(가) 음수이면 지정된 <number>이(가) 소수점의 왼쪽에서 반올림됩니다. 예시는 다음과 같습니다.
|
SIN(<number>) | 지정된 <number>의 사인값을 반환하며, 이는 라디안의 각도로 간주됩니다. |
TAN(<number>) | 지정된 <number>의 탄젠트 값을 반환하며, 이는 라디안의 각도로 간주됩니다. |
TRUNCATE(<number>,<decimal_place>) | 지정된 <decimal_place>에서 <number>를 버립니다. 양의 <decimal_place>는 지정된 소수점까지 버립니다. <decimal_place>가 음수이면 <number>가 소수점의 왼쪽에서 버립니다. 첫 번째 예시에서는 소수 자릿수 오른쪽에 있는 숫자가 숫자 2개만 포함하도록 잘려, 결과로 나타나는 값은 111.99입니다. 두 번째 예시에서는 소수 자릿수 왼쪽에 있는 숫자가 잘려, 결과로 나타나는 값은 100.00입니다.
|
문자열 함수
함수 | 설명 |
---|---|
CAST(<string> AS DATE | TIME) | 문자열 값이 지원되는 형식인 경우 문자열을 날짜 또는 시간으로 변환합니다. 문자열이 'MM/DD/YYYY hh:mm:ss' 또는 'YYYY-MM-DD' 형식인 경우 날짜로 변환할 수 있습니다. 문자열이 'HH:MM:SS' 형식인 경우 시간 전용 데이터 유형(TIME)으로 변환할 수 있습니다. 예를 들어, 다음 문자열은 날짜로 변환할 수 있습니다. CAST('1988-05-30' AS DATE) |
CHAR_LENGTH(<string>) | 지정된 문자열의 문자 수를 반환합니다. 결과는 정수입니다. 예를 들어, 다음 문은 8을 반환합니다. CHAR_LENGTH('Redlands') |
CONCAT(<string1>, <string2>) | 두 개의 문자열 값을 연결합니다. 두 문자열만 제공할 수 있습니다. 두 개가 넘는 문자열을 연결하려면 아래와 같이 연속 CONCAT 함수를 중첩합니다. 아래의 첫 번째 예시에서는 문자 A 및 B를 연결합니다. 두 번째 예시에서는 세 개의 문자열 값인 A, :, B를 연결하기 위한 중첩된 CONCAT 함수가 표시됩니다.
Null 값은 빈 문자열로 변환됩니다. |
CURRENT_USER | 쿼리에 CURRENT_USER 함수가 포함된 경우 변수와 유사한 역할을 합니다. 호스팅 피처 레이어 또는 호스팅 피처 레이어 뷰에 접근하는 사용자의 사용자 이름이 식별되고 쿼리에 사용됩니다. 예를 들어, planner3이라는 사용자가 다음 쿼리 정의가 포함된 호스팅 피처 레이어 뷰에 접근하기 위해 기관에 로그인한 경우, 연결된 사용자에게는 staffmember 필드에 planner3 값이 포함된 피처만 반환됩니다. staffmember=current_user 다음 예시에서는 staffmember 필드에 여러 값이 저장되어 있습니다. 다음 where 절은 필드에 여러 사용자 이름이 저장되어 있는 경우에도 staffmember의 텍스트 값에서 현재 사용자 이름을 찾습니다. where=position(current_user in staffmember)>0 |
POSITION(<substring>, <string>) | 지정하는 문자열에서 하위 문자열이 처음 나타나는 위치를 반환합니다. 지정한 하위 문자열이 발견되지 않으면 결과는 0입니다. 아래의 첫 번째 예시에서는 하위 문자열(boat)의 첫 번째 문자(b)가 문자열(Sailboat)의 다섯 번째 문자이므로 결과는 5입니다. 두 번째 예시에서는 하위 문자열(motor)이 문자열에 없으므로 결과는 0입니다.
|
SUBSTRING(<string>, <start>, <length>) | 문자열 값의 일부를 반환합니다. <start>는 반환된 문자의 시작 위치를 지정하는 정수 색인이고 <length>는 반환되는 문자의 수입니다. 예를 들면 다음과 같습니다.
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | 지정하는 문자열에서 모든 선행 또는 후행 공백이 제거된 문자열을 반환합니다. 다음 예시에서는 San Bernardino 문자열 앞뒤에 공백이 있습니다. BOTH 키워드는 텍스트 문자열의 시작 부분과 끝부분에서 공백 문자열(작은따옴표 두 개와 그 사이의 공백으로 나타냄)을 자르는 데 사용됩니다. TRIM(BOTH ' ' FROM ' San Bernardino ') 그러면 'San Bernardino' 문자열이 반환됩니다. |
UPPER(<string>) | 모든 문자가 대문자로 변환된 문자열을 반환합니다. 이 예시에서는 Sailboat 문자열의 모든 문자가 대문자로 변환되어, 결과로 나타나는 문자열은 'SAILBOAT'입니다. UPPER('Sailboat') |
LOWER(<string>) | 모든 문자가 소문자로 변환된 문자열을 반환합니다. 다음 예시에서는 'sailboat'가 반환됩니다. LOWER('Sailboat') |