programing

정렬을 위한 Varchar to number 변환

yellowcard 2023. 9. 12. 19:57
반응형

정렬을 위한 Varchar to number 변환

주문하신 문의 사항이 있습니다.column:

select * from mytable order by column asc — sort table

columntype은 varchar이므로 출력은 다음과 같습니다.

1
10
100
11
12
13

출력이 다음과 같이 되도록 숫자 값으로 정렬하려면 어떻게 정렬해야 합니까?

1
10
11
12
13
100

용도:

order by cast(column as unsigned) asc

이것은 치료를 원하시면 사용하시면 됩니다.column~하듯이INT만:

SELECT * FROM mytable ORDER BY column+0;
1
10
11
12
13
100

아니면 이걸 치료하고 싶다면요column겸사겸사INT그리고.VARCHAR

SELECT * FROM mytable ORDER BY column+0, column; #this will sort the column by VARCHAR first and then sort it by INT

abc
xyz
1
10
11
12
13
100

이 작업도 수행할 수 있습니다.


order by (0 + column) asc

단순히 선언에 의해 순서를 약간 수정하는 경우(필드별 순서에 "+0"을 추가) MySQL에서 필드를 자연스럽게 정렬하도록 강제할 수 있습니다.

 > select * from mytable order by column+0 asc;
 column
 1 
 10
 11
 12
 13 
 100
    Added a full code script here , but need to sort 1001 and 1002 before - as well.
We have total 5 solution , means 5 different queries as solution with full script.


=============================================================
    SET NAMES utf8;
    SET foreign_key_checks = 0;
    SET time_zone = 'SYSTEM';
    SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

    DROP TABLE IF EXISTS `varchar_sort`;
    CREATE TABLE `varchar_sort` (
      `user_id` int(11) NOT NULL AUTO_INCREMENT,
      `actual_user_id` varchar(200) DEFAULT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    INSERT INTO `varchar_sort` (`user_id`, `actual_user_id`) VALUES
    (1, '1001-4'),
    (2, '1001-1'),
    (3, '1001-111'),
    (4, '1002-1'),
    (5, '1001-66'),
    (6, '1001-100'),
    (7, '1001-110');


    SELECT user_id,actual_user_id,CONVERT(SUBSTRING_INDEX(actual_user_id,'-',-1),UNSIGNED INTEGER) AS num
    FROM varchar_sort
    ORDER BY num;


    SELECT user_id,actual_user_id
    FROM varchar_sort
    ORDER BY CONVERT(SUBSTRING(actual_user_id, 6), SIGNED INTEGER);


    SELECT user_id,actual_user_id
    FROM varchar_sort
    ORDER BY CONVERT(SUBSTRING(actual_user_id, LOCATE('-', actual_user_id) + 1), SIGNED INTEGER);


    SELECT *, CAST(SUBSTRING_INDEX(actual_user_id, '-', -1) AS UNSIGNED) as num FROM varchar_sort ORDER BY num;

varchar_sort 순서에서 *를 convert(교체(actual_user_id, '-', SIGNED INTEGER)로 선택합니다.

    **Need to sort 1001 and 1002 as well.**

언급URL : https://stackoverflow.com/questions/1868965/varchar-to-number-conversion-for-sorting

반응형