0
点赞
收藏
分享

微信扫一扫

mysql字符串转数字类型


急:mysql查询结果字符串的排序问题

你的“中文”是固定的文字吗?

--下面的语句只支持9999以下的数字排序

selectid,col,right(col,length(col)-LEAST(

if(Locate('0',col)>0,Locate('0',col),9999),

if(Locate('1',col)>0,Locate('1',col),9999),

if(Locate('2',col)>0,Locate('2',col),9999),

if(Locate('3',col)>0,Locate('3',col),9999),

if(Locate('4',col)>0,Locate('4',col),9999),

if(Locate('5',col)>0,Locate('5',col),9999),

if(Locate('6',col)>0,Locate('6',col),9999),

if(Locate('7',col)>0,Locate('7',col),9999),

if(Locate('8',col)>0,Locate('8',col),9999),

if(Locate('9',col)>0,Locate('9',col),9999)

)-1)*1a

fromtest4orderbya

没有,就一个注释而已,没有中文。这个答案不大理想,有没有其他的解决办法?

本回答由提问者推荐

mysql 既按照字段里的数字排序,又按照字段里的首字母排序,sql能写吗

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

CREATEORREPLACEFUNCTIONF_TRANS_PINYIN_CAPITAL(P_NAMEINVARCHAR2)RETURNVARCHAR2AS

V_COMPAREVARCHAR2(100);

V_RETURNVARCHAR2(4000);

FUNCTIONF_NLSSORT(P_WORDINVARCHAR2)RETURNVARCHAR2AS

BEGIN

RETURNNLSSORT(P_WORD,'NLS_SORT=SCHINESE_PINYIN_M');

BEGIN

FORIIN1..LENGTH(P_NAME)LOOP

V_COMPARE:=F_NLSSORT(SUBSTR(P_NAME,I,1));

IFV_COMPARE>=F_NLSSORT('吖')ANDV_COMPARE<=F_NLSSORT('骜')THEN

V_RETURN:=V_RETURN||'a';

ELSIFV_COMPARE>=F_NLSSORT('八')ANDV_COMPARE<=F_NLSSORT('簿')THEN

V_RETURN:=V_RETURN||'b';

ELSIFV_COMPARE>=F_NLSSORT('嚓')ANDV_COMPARE<=F_NLSSORT('错')THEN

V_RETURN:=V_RETURN||'c';

ELSIFV_COMPARE>=F_NLSSORT('咑')ANDV_COMPARE<=F_NLSSORT('鵽')THEN

V_RETURN:=V_RETURN||'d';

ELSIFV_COMPARE>=F_NLSSORT('妸')ANDV_COMPARE<=F_NLSSORT('樲')THEN

V_RETURN:=V_RETURN||'e';

ELSIFV_COMPARE>=F_NLSSORT('发')ANDV_COMPARE<=F_NLSSORT('猤')THEN

V_RETURN:=V_RETURN||'f';

ELSIFV_COMPARE>=F_NLSSORT('旮')ANDV_COMPARE<=F_NLSSORT('腂')THEN

V_RETURN:=V_RETURN||'g';

ELSIFV_COMPARE>=F_NLSSORT('妎')ANDV_COMPARE<=F_NLSSORT('夻')THEN

V_RETURN:=V_RETURN||'h';

ELSIFV_COMPARE>=F_NLSSORT('丌')ANDV_COMPARE<=F_NLSSORT('攈')THEN

V_RETURN:=V_RETURN||'j';

ELSIFV_COMPARE>=F_NLSSORT('咔')ANDV_COMPARE<=F_NLSSORT('穒')THEN

V_RETURN:=V_RETURN||'k';

ELSIFV_COMPARE>=F_NLSSORT('垃')ANDV_COMPARE<=F_NLSSORT('擽')THEN

V_RETURN:=V_RETURN||'l';

ELSIFV_COMPARE>=F_NLSSORT('呒')ANDV_COMPARE<=F_NLSSORT('椧')THEN

V_RETURN:=V_RETURN||'m';

ELSIFV_COMPARE>=F_NLSSORT('拏')ANDV_COMPARE<=F_NLSSORT('疟')THEN

V_RETURN:=V_RETURN||'n';

ELSIFV_COMPARE>=F_NLSSORT('筽')ANDV_COMPARE<=F_NLSSORT('沤')THEN

V_RETURN:=V_RETURN||'o';

ELSIFV_COMPARE>=F_NLSSORT('妑')ANDV_COMPARE<=F_NLSSORT('曝')THEN

V_RETURN:=V_RETURN||'p';

ELSIFV_COMPARE>=F_NLSSORT('七')ANDV_COMPARE<=F_NLSSORT('裠')THEN

V_RETURN:=V_RETURN||'q';

ELSIFV_COMPARE>=F_NLSSORT('亽')ANDV_COMPARE<=F_NLSSORT('鶸')THEN

V_RETURN:=V_RETURN||'r';

ELSIFV_COMPARE>=F_NLSSORT('仨')ANDV_COMPARE<=F_NLSSORT('蜶')THEN

V_RETURN:=V_RETURN||'s';

ELSIFV_COMPARE>=F_NLSSORT('侤')ANDV_COMPARE<=F_NLSSORT('箨')THEN

V_RETURN:=V_RETURN||'t';

ELSIFV_COMPARE>=F_NLSSORT('屲')ANDV_COMPARE<=F_NLSSORT('鹜')THEN

V_RETURN:=V_RETURN||'w';

ELSIFV_COMPARE>=F_NLSSORT('夕')ANDV_COMPARE<=F_NLSSORT('鑂')THEN

V_RETURN:=V_RETURN||'x';

ELSIFV_COMPARE>=F_NLSSORT('丫')ANDV_COMPARE<=F_NLSSORT('韵')THEN

V_RETURN:=V_RETURN||'y';

ELSIFV_COMPARE>=F_NLSSORT('帀')ANDV_COMPARE<=F_NLSSORT('咗')THEN

V_RETURN:=V_RETURN||'z';

ENDIF;

ENDLOOP;

RETURNV_RETURN;

本回答由网友推荐

c语言中如何将数字转换为字符串?

  #include#includechar*digitToAlpha(intval,char*buf,unsignedradix);intmain(intargc,char*argv[])intiNum=55;charstrNum[10]="";digitToAlpha(iNum,strNum,10);printf("%s\n",strNum);system("PAUSE");return0;*功能:将数值转换为字符串参数:第一个是要转化的整数

c语言中如何将数字转换为字符串?

  #include#includechar*digitToAlpha(intval,char*buf,unsignedradix);intmain(intargc,char*argv[])intiNum=55;charstrNum[10]="";digitToAlpha(iNum,strNum,10);printf("%s\n",strNum);system("PAUSE");return0;*功能:将数值转换为字符串参数:第一个是要转化的整数

Mysql字符串中有数字的排序问题

SELECT id, col,LENGTH(col) FROM d ORDER BY LENGTH(col) ASC, col ASC

SELECT id,col FROM d ORDER BY CAST(TRIM('中文' FROM col) AS SIGNED)

根据实际情况看吧你的“中文”是固定的文字吗?

--下面的语句只支持9999以下的数字排序

select id,col, right(col,length(col)-LEAST(

if(Locate('0',col) >0,Locate('0',col),9999),

if(Locate('1',col) >0,Locate('1',col),9999),

if(Locate('2',col) >0,Locate('2',col),9999),

if(Locate('3',col) >0,Locate('3',col),9999),

if(Locate('4',col) >0,Locate('4',col),9999),

if(Locate('5',col) >0,Locate('5',col),9999),

if(Locate('6',col) >0,Locate('6',col),9999),

if(Locate('7',col) >0,Locate('7',col),9999),

if(Locate('8',col) >0,Locate('8',col),9999),

if(Locate('9',col) >0,Locate('9',col),9999)

  )-1) *1 a

from test4 order by aselect * from 表名 order by substring(col,3,2)+0;select id, col from tableName order by length(col) asc, col asc你的“中文”是固定的文字吗?

--下面的语句只支持9999以下的数字排序

select id,col, right(col,length(col)-least(

if(locate('0',col) >0,locate('0',col),9999),

if(locate('1',col) >0,locate('1',col),9999),

if(locate('2',col) >0,locate('2',col),9999),

if(locate('3',col) >0,locate('3',col),9999),

if(locate('4',col) >0,locate('4',col),9999),

if(locate('5',col) >0,locate('5',col),9999),

if(locate('6',col) >0,locate('6',col),9999),

if(locate('7',col) >0,locate('7',col),9999),

if(locate('8',col) >0,locate('8',col),9999),

if(locate('9',col) >0,locate('9',col),9999)

)-1) *1 a

from test4 order by aselect id,col from tablename order by col+0 asc;

mysql数据库数据怎么实现排序输出

select * from 百米成绩表 order by mark asc

order by 的意思是排序,你的mark应该是一个字符串类型的字段(如果是oracle的话应该是varchar2) order by 跟的是一个字段,意思是按照这个字段进行排序,字符串的排序,会挨个比对第一个字符,然后第二个字符,然后以此类推,asc 是代表正序,就是小的在上,desc是倒序,

不过这里存在问题,如果秒数都是两位数倒是好说,但是如果秒数是1位数 比如9秒00 那么在第二位排序的时候就会用秒字跟其他数字相比较,会出问题的,建议规范格式,强制要求秒数位数固定,或者干脆这个字段用数字来代替,比如11秒97,让他秒数变成1197,数字比大小是不会出现问题的。mysql中排序输出需要用order by。

如图,test表中有如下数据:

现在分别要求按id正序和倒序输出结果。

select * from test order by id;结果:

select * from test order by id desc;结果:

举报

相关推荐

0 条评论