[SQL] SQL 쿼리는 값 목록에 여러 범위에 대한 일치하는 번호 목록을 번역하기
SQLSQL 쿼리는 값 목록에 여러 범위에 대한 일치하는 번호 목록을 번역하기
나는 우선 순위 열을 기준으로 정렬 된 값의 목록에 특정 범위 내에 번호의 목록을 변환해야합니다. 표는 다음과 같은 값을가집니다 :
| YEAR | R_MIN | R_MAX | VAL | PRIO |
------------------------------------
2010 18000 90100 52 6
2010 240000 240099 82 3
2010 250000 259999 50 5
2010 260000 260010 92 1
2010 330000 330010 73 4
2010 330011 370020 50 5
2010 380000 380050 84 2
범위는 다른 년 다를 수 있습니다. 1 년 이내 범위는 중복 않습니다.
입력은 년 하나에이 범위를 넘어 수있는 번호 목록이 될 것입니다. 입력 번호의리스트는, 1 내지 10 참조 작을 것이다. 입력 번호의 예 :
(20000, 240004, 375000, 255000)
그 입력으로 나는 우선 열, 또는 단일 값으로 정렬 된 목록을 좀하고 싶습니다 :
82
50
52
UNIQUE 및 MAX_RESULTS = 1 할 것이다, 그래서 내가 여기에 관심이있는 유일한 값은 82이다. 그것은 쉽게 번호 당 하나 개의 쿼리를 수행 할 수 있습니다, 다음 자바 코드에서 정렬,하지만 난 하나의 SQL 쿼리를 수행하는 것을 선호합니다.
SQL 쿼리, Oracle 데이터베이스에서 실행하려면 어떻게 나에게 원하는 결과를 줄 것이다?
(참고, 이는 서로 다른 열 범위에 정의 된 값의리스트에서 각각의 값과 일치 관하여, 분리에 대한 입력 문자열이 아니다.)
해결법
-
==============================
1.난 당신이 각각의 숫자에로 문자열 및 분할과 같은 숫자의 집합을 전달하려는 추측하고있다. 오라클은 내장 토크 나이가 제공되지 않기 때문에, 열심히 당신이 생각하는 것보다입니다. 이상한, 응?
난 당신이 각각의 숫자에로 문자열 및 분할과 같은 숫자의 집합을 전달하려는 추측하고있다. 오라클은 내장 토크 나이가 제공되지 않기 때문에, 열심히 당신이 생각하는 것보다입니다. 이상한, 응?
다스 Interwabs 주위에 노크 솔루션 토크 나이 PL / SQL의 숫자가있다. 나는 정규식 (따라서 오직 오라클 10g 이상)을 사용 아누 프 PANI의 구현의 변형을 사용하고 있습니다. 내 변형 내가 SQL 유형으로 선언 한 숫자의 배열을 반환합니다 :
SQL> create or replace type numbers as table of number 2 / Type created. SQL>
이것은 내가 SELECT 문에서 TABLE () 함수의 입력으로 사용할 수 있다는 것을 의미합니다 :
SQL> select * from table (str_to_number_tokens('20000, 240004, 375000, 255000')) 2 / COLUMN_VALUE ------------ 20000 240004 375000 255000 SQL>
이것은 내가 다음과 같이 쿼리에 조인 할 수있는 테이블에 숫자의 당신의 문자열을 설정할 수 있습니다 의미합니다 :
SQL> select val 2 from t23 3 , ( select column_value as i_no 4 from table (str_to_number_tokens('20000, 240004, 375000, 255000')) ) sq 5 where t23.year = 2010 6 and sq.i_no between t23.r_min and t23.r_max 7 order by t23.priority 8 / VAL ---------- 82 50 52 SQL>
-
==============================
2.나는 당신의 첫 번째 작업은 당신이 가입 할 수있는 결과 집합 (예. 메모리 테이블)에 번호 목록을 변환하는 것입니다 생각합니다. 나는 오라클을 모르는, 그래서 그것을 할 수있는 쉬운 방법이있을 수 있지만, 그렇지 않으면 당신은이 작업을 수행하는 사용자 정의 함수의 어떤 종류를 작성해야합니다. 그것은 너무 열심히하지 않아야하고 목록이 작기 때문에 성능은 문제가되지 않습니다. 그런 다음 그 테이블에 가입 할 수 있습니다. 이 같은:
나는 당신의 첫 번째 작업은 당신이 가입 할 수있는 결과 집합 (예. 메모리 테이블)에 번호 목록을 변환하는 것입니다 생각합니다. 나는 오라클을 모르는, 그래서 그것을 할 수있는 쉬운 방법이있을 수 있지만, 그렇지 않으면 당신은이 작업을 수행하는 사용자 정의 함수의 어떤 종류를 작성해야합니다. 그것은 너무 열심히하지 않아야하고 목록이 작기 때문에 성능은 문제가되지 않습니다. 그런 다음 그 테이블에 가입 할 수 있습니다. 이 같은:
SELECT yt.val FROM your_table yt JOIN your_parse_numbers_function(@inputlist) il ON il.value >= yt.R_MIN AND il.value <= yt.R_MAX WHERE yt.YEAR = @year
원하는 경우는 1 개 결과를 제한 할 수 있지만, 범위가 중복되지 대한 가정이 맞다면 그것은 단지 하나 개 어쨌든을 반환해야합니다.
from https://stackoverflow.com/questions/2635930/sql-query-to-translate-a-list-of-numbers-matched-against-several-ranges-to-a-li by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동일한 ID를 갖는 행 테이블에서 컬럼을 사용하여 문자열 값을 형성하는 가장 좋은 방법이 무엇입니까? (0) | 2020.07.15 |
---|---|
[SQL] SQL 서버에서 하버 사인 식의 SQL 쿼리 (0) | 2020.07.15 |
[SQL] 트리 구조의 모든 구성원을 찾기 (0) | 2020.07.15 |
[SQL] .NET 간단한 양식 AJAX와 JQUERY를 통해 제출 (0) | 2020.07.15 |
[SQL] 어떻게 MS Access 데이터베이스 페이징을 + 검색하려면? (0) | 2020.07.15 |