[SQL] SQL : 특정 열 ... 가능한 내에서 문자열을 사용하여 ORDER?
SQLSQL : 특정 열 ... 가능한 내에서 문자열을 사용하여 ORDER?
나는 그의 열 npID, 제목, URL 및 문제가있는 데이터베이스를 가지고있다.
여기에 2 년 항목의 예입니다 :
npID title URL issue
88 EMR Newsletter a.com 2010 Third_Quarter
89 EMR Newsletter b.com 2010 Second_Quarter
43 EMR Newsletter c.com 2010 First_Quarter
47 EMR Newsletter d.com 2009 Winter
45 EMR Newsletter e.com 2009 Summer
46 EMR Newsletter f.com 2009 Spring
44 EMR Newsletter g.com 2009 Fall
내가 뭘하고 싶은 것은 "문제"열 내의 문자열을 기준으로 결과를 정렬 할 수 있습니다. 그러나, 2010 년까지, 클라이언트는 헤더로 시즌을 사용하고 2010 년에, 그들은 분기를 사용하기 시작했습니다. 있는 방법 "에 의해 ORDER"는에 거기에 나는 그들이 어디서든 "문제"값을 발견 할 때 / 경우 정렬 기준으로 단어의 목록을 제공 할 수 있습니까?
나는이 같은 것으로 최종 결과를 좋아하는 것 :
npID title URL issue
43 EMR Newsletter c.com 2010 First_Quarter
89 EMR Newsletter b.com 2010 Second_Quarter
88 EMR Newsletter a.com 2010 Third_Quarter
47 EMR Newsletter d.com 2009 Winter
45 EMR Newsletter e.com 2009 Summer
46 EMR Newsletter f.com 2009 Spring
44 EMR Newsletter g.com 2009 Fall
해결법
-
==============================
1.이 작업을 수행 할 주문 BY에 CASE 문을 넣을 수 있습니다. 더 나은 경로는 실제에 응용 프로그램 및 테이블을 변경 당신이 할 수있는 개발 시간이있을 때 자신이 속한 곳 열이 관련 데이터를 저장하는 것입니다.
이 작업을 수행 할 주문 BY에 CASE 문을 넣을 수 있습니다. 더 나은 경로는 실제에 응용 프로그램 및 테이블을 변경 당신이 할 수있는 개발 시간이있을 때 자신이 속한 곳 열이 관련 데이터를 저장하는 것입니다.
ORDER BY CAST(SUBSTRING(issue, 1, 4) AS INT) DESC, -- Year CASE WHEN issue LIKE '%First_Quarter' OR issue LIKE '%Winter' THEN 1 WHEN issue LIKE '%Second_Quarter' OR issue LIKE '%Spring' THEN 2 WHEN issue LIKE '%Third_Quarter' OR issue LIKE '%Summer' THEN 3 WHEN issue LIKE '%Fourth_Quarter' OR issue LIKE '%Fall' THEN 4 END
당신이 원하는 그러나 계절을 주문. 또한 CASE 문을 조정하여 (Q2 다음에 봄 다음 Q1, 등) 특정의 방식으로 주문할 수 있습니다.
-
==============================
2.순서에의 CASE 문을보십시오 :
순서에의 CASE 문을보십시오 :
SELECT npID, title, URL, issue FROM tbl ORDER BY substring(issue, 1, 4) DESC ,CASE WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter') THEN 1 WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2 WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter') THEN 3 WHEN substring(issue, 6, 100) IN ('Fall', 'Fourth Quarter') THEN 4 ELSE 5 END;
묻지 마세요, 왜 겨울 -> 여름 -> 봄이 -는 클라이언트가 원하는거야! :)
식을 한 번만 평가 이후 A "간단한"CASE 더 수행해야합니다. 오른쪽 (문제는 -5) 비트 속도 (문제, 6, 100)는 substring 같지만 :
SELECT npid, title, url, issue FROM tbl ORDER BY left(issue, 4) DESC ,CASE right(issue, -5) WHEN 'Winter' THEN 1 WHEN 'First_Quarter' THEN 1 WHEN 'Summer' THEN 2 WHEN 'Second_Quarter' THEN 2 WHEN 'Spring' THEN 3 WHEN 'Third_Quarter' THEN 3 WHEN 'Fall' THEN 4 WHEN 'Fourth Quarter' THEN 4 ELSE 5 END;
왼쪽 ()과 오른쪽 ()는 PostgreSQL의 9.1에 추가되었습니다. 권리와 트릭 ()는 왼쪽에서 문자의 일정 번호를 트림 음의 번호를 사용하는 것입니다.
이들은 (<= 100 개 문자의 문자열) 동일 :
SELECT substring(issue from 6 for 100) AS substring1 ,substring(issue, 6, 100) AS substring2 ,substring(issue, 6) AS substring3 ,substr(issue, 6, 100) AS substr1 ,substr(issue, 6) AS substr2 ,right(issue, -5) AS right0 FROM tbl
-> sqlfiddle
-
==============================
3.여기에 같은 주제의 변형입니다
여기에 같은 주제의 변형입니다
ORDER BY SUBSTRING(issue,1,4) Desc, CASE SUBSTRING(issue,6, LEN(issue) - 5) WHEN 'First_Quarter' THEN 1 WHEN 'Second_Quarter' THEN 2 WHEN 'Second_Quarter' THEN 3 WHEN 'Winter' then 1 WHEN 'Spring' then 2 WHEN 'Summer' then 3 WHEN 'Fall' then 4 END
-
==============================
4.예, 당신은 SQL 명령 어디서나 경우 / 다음 구조를 사용할 수 있습니다.
예, 당신은 SQL 명령 어디서나 경우 / 다음 구조를 사용할 수 있습니다.
당신은 이미 당신을 위해 작동하는 문자열 패턴이 있습니까? 그렇다면, 당신이 뭔가를 같이 사용할 수 있습니다 :
ORDER BY (IF (SUBSTRING(first_match_of_issue) IS NOT NULL) THEN first_match_of_issue ELSE second_match_of_issue))
그러나 - 당신은 이미 그들이있을거야 알고 있다면, 다른 답변에서 언급 한 CASE 문은 아마 쉽다.
-
==============================
5.이 방법을 (이 T-SQL에) 시도 :
이 방법을 (이 T-SQL에) 시도 :
select * from your_table as t order by substring([issue], 1, 4) desc, case substring([issue], 6, len([issue]) - 5) when 'First_Quarter' then 1 when 'Second_Quarter' then 2 when 'Third_Quarter' then 3 when 'Fourth_quarter' then 4 when 'Spring' then 3 when 'Summer' then 2 when 'Fall' then 4 when 'Winter' then 1 else 5 -- show unexpected input last end asc
-
==============================
6.당신은 데이터의 하위 문자열 부분을 선택하고 만들 수
당신은 데이터의 하위 문자열 부분을 선택하고 만들 수
SELECT npId, title, URL, issue, SUBSTRING(issue, 4) AS strsort FROM tbl ORDER BY strsort, issue
-
==============================
7.
SELECT Column1, row_number() over(order by substring(column2,280,9)) FROM YourTable
이 2 열 하위 문자열의에 의해 순서를 제공 할 것입니다.
from https://stackoverflow.com/questions/8187828/sql-order-by-using-a-substring-within-a-specific-column-possible by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 필드의 DEFAULT 값을 선택하는 방법 (0) | 2020.05.15 |
---|---|
[SQL] 절에 가변적 목록과 테이블에서 SELECT (0) | 2020.05.15 |
[SQL] 윈도우 기능 : LAST_VALUE (BY ... ASC ORDER) LAST_VALUE과 동일 (ORDER BY ... DESC) (0) | 2020.05.15 |
[SQL] 방법으로 숫자를 포맷하는 방법 "을 참조하십시오." 1000 개 단위 구분하고 ","같은 소수 구분 기호로? (0) | 2020.05.15 |
[SQL] 왜이 반환 자원 ID # 2를합니까? [복제] (0) | 2020.05.15 |