本人初次使用oracle数据库,现在遇到一个问题。
在查询的时候要求按编码字段从小到大排序,但是这个字段是以字符串形式储存的数字(其中有个别尾数有个X),而且长短不一。
我使用order by NLSSORT(DWBM,'NLS_SORT = SCHINESE_PINYIN_M'), to_number(translate(DWBM, '0123456789' || DWBM, '0123456789'))显示无效。
请朋友们解答一下。没有使用存储过程,所以希望能在查询语句中实现。谢谢!
字段值示例:
00150
001685428X
2510480
5612752174
在查询的时候要求按编码字段从小到大排序,但是这个字段是以字符串形式储存的数字(其中有个别尾数有个X),而且长短不一。
我使用order by NLSSORT(DWBM,'NLS_SORT = SCHINESE_PINYIN_M'), to_number(translate(DWBM, '0123456789' || DWBM, '0123456789'))显示无效。
请朋友们解答一下。没有使用存储过程,所以希望能在查询语句中实现。谢谢!
字段值示例:
00150
001685428X
2510480
5612752174
select * from T_GG_XMXX where SFMJ <> 0 and XMBM like '"+XMbm+"' and XMMC like '"+XMmc+"' and rownum <= "+num+" order by ?
在试试,加个空格!
XMBM like '"+XMbm+"' and 这里应该改成
XMBM like '%"+XMbm+"%' and 少了百分号,xmmc也一样。按你那么写,like就相当于=了
order by子句里,我不确定你要排序的规则如果字符串中只有'X'一个非数字的字符,
to_number(translate(DWBM, '0123456789' || DWBM, '0123456789'))改成
to_number(replace(dwbm,'X',''))就行了
我的XMbm和xmmc都是前后加上%的参数,执行以后没有任务错误,但是就是显示的数据还是没有按照编码字段排序。
union all select '001685428X' from dual
union all select '2510480' from dual
union all select '5612752174' from dual)
select * from tt
order by to_number(replace(DWBM,'X',''))DWBM
00150
001685428X
2510480
5612752174
这个是按DWDM中的数字部分,从小到大排序的你检查下自己的order by expression1,expression2
先按前面的条件排序,相同条件下再按后面排序
现在这个表里面编码字段全是数字。
sql = "select * from T_GG_ZSDW where SFMJ <> 0 and DWBM like '"+DWbm+"' and DWMC like '"+DWmc+"' and rownum <= "+num+" order by to_number(DWBM)";这个是非首页的。
sql = "select * from (select a.*,rownum rn from (select * from T_GG_ZSDW where SFMJ <> 0 and DWBM like '"+DWbm+"' and DWMC like '"+DWmc+"') a where rownum <= "+lostNum+") where rn >= "+firstNum+" order by to_number(DWBM)";
sql = "select * from (select a.*,row_number()over(order by to_number(replace(dwbm,'X',''))) rn from T_GG_ZSDW a where SFMJ <> 0 and DWBM like '"
+DWbm+"' and DWMC like '"+DWmc+"') where rn<= "+lostNum+" and rn >= "+firstNum+" order by rn";
或者将+" and rn >= "+firstNum去掉,lostnum改成num
其实分成2句没什么必要