반응형
하나의 숫자가 들어 있는 영숫자 이기종 문자열의 MySQL 열, 해당 숫자를 기준으로 정렬
제목이 길어서 죄송합니다.
참고: 이 작업은 MariaDB 10.4.x에서 수행해야 합니다.
참고:스택 오버플로에 대한 많은 답변/쿼리를 시도했으므로 적어도 12개의 쿼리를 복사하여 붙여넣는 것은 말이 되지 않는다고 생각합니다.
제목 열이 있는 경우
그래서 그것은 VARCHAR이고 그 안에 어떤 문자열도 있을 수 있습니다.
그러나 많은 "주체"는 "일부 AA 텍스트 345 기타 텍스트" 내에 숫자를 가질 것이지만 "일부 BB는 2563 다시 텍스트"도 가질 것입니다.
다음과 같은 질문을 하는 것이 가능합니까?
- 실제로 숫자(해당 숫자가 한 자리, 두 자리, 세 자리 및 네 자리일 수 있음)를 포함하는 주체만 추출합니다. 즉, 문자 또는 기타 문자가 있지만 숫자는 없는 주체는 생략합니다.
- 정말 자연스럽게 숫자로 주제를 분류합니다.
위의 두 과목이 추출되고 이런 식으로 정렬된다는 것을 의미합니다.
"some at text 345 other text"
"some big text with 1250 other text"
"some at eagle quite text 2563 again text"
"some big go for it text 3343 again text"
345 < 1250 < 2563 < 3343이라는 단순한 이유로
너무 많은 솔루션을 시도했지만 이러한 정렬이 이루어지므로 결과가 "잘못된" 경우가 많습니다.
some at ...
some at ...
some big ...
some big ...
알파벳 순서로 먼저 정렬됨을 의미합니다.
다른 쿼리는 ASC 또는 DESC를 고려하지 않는 것으로 보입니다.
(숫자가 있을 때) 숫자에 따라 정렬하기만 하면 되는 동안 :-)
힌트를 주셔서 감사합니다.
다음 표를 사용합니다.
CREATE TABLE `testtable` (
`subject` varchar(45) NOT NULL,
PRIMARY KEY (`subject`)
) ENGINE=InnoDB;
이 쿼리를 사용할 수 있습니다.
SELECT
subject,
CAST(regexp_substr(subject, '[0-9]+') AS UNSIGNED)
FROM testtable
-- only the subjects that actually contains a number
WHERE regexp_substr(subject, '[0-9]+')
-- really naturally sort the subjects with numbers
ORDER BY CAST(regexp_substr(subject, '[0-9]+') AS UNSIGNED);
언급URL : https://stackoverflow.com/questions/66679986/mysql-column-of-alphanumeric-heterogeneous-strings-with-one-number-inside-sort
반응형
'codememo' 카테고리의 다른 글
| R 데이터 프레임에서 NA 값을 0으로 바꾸려면 어떻게 해야 합니까? (0) | 2023.06.12 |
|---|---|
| PL/SQL 로깅 - 제어 방법 (0) | 2023.06.12 |
| 문자열에서 HTML 태그를 제거하는 Python 코드 (0) | 2023.06.12 |
| php 값을 갖는 div 콘텐츠 전환 방법 (0) | 2023.06.12 |
| Typescript의 as const에 해당하는 JSDoc? (0) | 2023.06.12 |