mysql字段排序数字在字母前面,字母也要按首字母排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql字段排序数字在字母前面,字母也要按首字母排序相关的知识,希望对你有一定的参考价值。

比如:1,a,2,b,4,c 排序后:a,b,c,1,2,4这样

参考技术A 如果是oracle 的话,创建下面的函数,调用函数做视图可以实现你要的效果

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);
FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');
END;
BEGIN
FOR I IN 1..LENGTH(P_NAME) LOOP
V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));
IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('骜 ') THEN
V_RETURN := V_RETURN || 'a';
ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN
V_RETURN := V_RETURN || 'b';
ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('错 ') THEN
V_RETURN := V_RETURN || 'c';
ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN
V_RETURN := V_RETURN || 'd';
ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN
V_RETURN := V_RETURN || 'e';
ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN
V_RETURN := V_RETURN || 'f';
ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN
V_RETURN := V_RETURN || 'g';
ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN
V_RETURN := V_RETURN || 'h';
ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN
V_RETURN := V_RETURN || 'j';
ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN
V_RETURN := V_RETURN || 'k';
ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN
V_RETURN := V_RETURN || 'l';
ELSIF V_COMPARE >= F_NLSSORT('呒 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN
V_RETURN := V_RETURN || 'm';
ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('疟 ') THEN
V_RETURN := V_RETURN || 'n';
ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('沤 ') THEN
V_RETURN := V_RETURN || 'o';
ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN
V_RETURN := V_RETURN || 'p';
ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN
V_RETURN := V_RETURN || 'q';
ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN
V_RETURN := V_RETURN || 'r';
ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN
V_RETURN := V_RETURN || 's';
ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('箨 ') THEN
V_RETURN := V_RETURN || 't';
ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鹜 ') THEN
V_RETURN := V_RETURN || 'w';
ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN
V_RETURN := V_RETURN || 'x';
ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韵 ') THEN
V_RETURN := V_RETURN || 'y';
ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN
V_RETURN := V_RETURN || 'z';
END IF;
END LOOP;
RETURN V_RETURN;
END;
参考技术B ORDER BY FIELD(name, '',IF((e.exhibitorName REGEXP '^[0-9]')=1,name,''), IF((name REGEXP '^[a-z|A-Z]')=1,name,'')),CONVERT(name USING gbk) COLLATE gbk_chinese_ci ASC

linq 字母数字组合字符串排序

我在数据库有一个字段的值是这样的,字符串类型
var query= from top in context .Yield
select new SizeDTO()

size= context .size
.ToList();
结果是:2 j11 j11.5 2.5 3 4 k5 b6.5 7 8 9 10
我想对一结果排序,之前我想这样排的
.ToList().OrderBy(c => Convert.ToDouble(c.size_nm.ToString()));转型后排,但是里面有些值有字母,我也想过使用Substring去截取之后转,但是又有纯数字!求大神指导

        static void Main(string[] args)
        
            string[] all = new string[]  "a2", "b6", "4", "5", "3", "cc1.1" ;

            var v = all.Select(a => new
            
                a,
                ints = new string(a.Where(c => char.IsDigit(c) ||
                    c == '.').ToArray())
            ).Select(b => new
            
                s = b.a,
                i = Convert.ToDouble(b.ints)
            ).OrderBy(o => o.i).Select(r => r.s);

            foreach (var x in v)
                Console.WriteLine(x);
            Console.ReadLine();
        

参考技术A static void Main(string[] args)

string[] all = new string[] "a2", "b6", "4", "5", "3", "cc1.1" ;

var v = all.Select(a => new

a,
ints = new string(a.Where(c => char.IsDigit(c) ||
c == '.').ToArray())
).Select(b => new

s = b.a,
i = Convert.ToDouble(b.ints)
).OrderBy(o => o.i).Select(r => r.s);

foreach (var x in v)
Console.WriteLine(x);
Console.ReadLine();
参考技术B 取第一个字母用 编码排序呢?

以上是关于mysql字段排序数字在字母前面,字母也要按首字母排序的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL - 按首字母排序

mysql 数据库中 ,按照字母加数字的字符串排序

Drupal:如何在视图中按首字母排序和显示节点分组

linq 字母数字组合字符串排序

localeCompare按首字母排序汉字

mysql根据汉字首字母排序的方法并按字母分组