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

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

如果是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 1LENGTH(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;

--负责把字符串转换为Varbinary

--思路,把字符串按拆分,然后转换成int,再转换成varbinary拼接

Create Function f_Order(@SourceSql  Varchar(8000),@StrSeprate Varchar(2))   

Returns Varbinary(8000)

As     

  Begin  

Declare @temp  Varbinary(8000)=0x0

Declare   @ch  Varchar(100)   

Set   @SourceSql=@SourceSql+@StrSeprate     

While(@SourceSql<>'')   

Begin   

 Set   @ch=left(@SourceSql,Charindex(@StrSeprate,@SourceSql,1)-1)   

 Set   @temp=@temp+Convert(Varbinary, Convert(Int,@ch))   

 Set   @SourceSql=Stuff(@SourceSql,1,Charindex(@StrSeprate,@SourceSql,1),'')   

  End   

  Return  @temp 

End   

Go

--建表

Create table T

(

A Varchar(100)

)

--插入数据

Insert Into T Values('11')

Insert Into T Values('111')

Insert Into T Values('112')

Insert Into T Values('12')

Insert Into T Values('101')

Insert Into T Values('1011')

Insert Into T Values('1012')

Insert Into T Values('111')

Insert Into T Values('21')

Insert Into T Values('31')

Insert Into T Values('41')

--测试

Select  from T 

order by dbof_Order(A,'')

呵呵,百度的,不过就是这个意思:

N 代表存入数据库时以 Unicode 格式存储。

N'string' 表示string是个Unicode字符串

Unicode 字符串的格式与普通字符串相似,但它前面有一个 N 标识符(N 代表 SQL-92 标准中的国际语言 (National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而 N'Michél' 则是 Unicode 常量。Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为 Unicode 常量指派当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用 Unicode 数据。

Unicode 字符串常量支持增强的排序规则。

DatePart 函数

返回一个包含已知日期的指定时间部分的 Variant (Integer)。

语法

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

DatePart 函数语法中有下列命名参数:

部分 描述

interval 必要。字符串表达式,是要返回的时间间隔。

date 必要。要计算的 Variant (Date) 值。

Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。

firstweekofyear 可选。指定一年第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。

设置

interval 参数的设定值如下:

设置 描述

yyyy 年

q 季

m 月

y 一年的日数

d 日

w 一周的日数

ww 周

h 时

n 分钟

s 秒

firstdayofweek 参数的设定值如下:

常数 值 描述

vbUseSystem 0 使用 NLS API 设置。

vbSunday 1 星期日(缺省值)

vbMonday 2 星期一

vbTuesday 3 星期二

vbWednesday 4 星期三

vbThursday 5 星期四

vbFriday 6 星期五

vbSaturday 7 星期六

firstweekofyear 参数的设定值如下:

常数 值 描述

vbUseSystem 0 使用 NLS API 设置。

vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。

vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。

vbFirstFullWeek 3 从第一个无跨年度的星期开始。

说明

DatePart 函数可以用来计算日期并返回指定的时间间隔。例如,可以使用DatePart 计算某个日期是星期几或目前为几点钟。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date 用双引号 (" ") 括起来,且年份略而不提,则在每次计算 date 表达式时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

其实没你想的那么复杂,排序是按每个字符的ascii码排序的,先按第一个字母排序,如果第一个字母一样,那么再按照第二个字母排序,依次类推,按照你的情况,直接排序就可以了

order by x

以上就是关于mysql字段排序数字在字母前面,字母也要按首字母排序全部的内容,包括:mysql字段排序数字在字母前面,字母也要按首字母排序、sql数字字符串排序、SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-')等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9400973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存