急: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;结果: