select * from data_syfr_tem o where o.batchno like '20180326%' ORDER BY (RIGHT(o.batchno, LENGTH(o.batchno)-9)) desc;
这个语句的意思就是将batchno截取“-”后面的数字,然后再来排序,你试一试。
老哥排序还是老样子。
@如梦一场: 你等着
@如梦一场: 更新之后:
select * from test o where o.batchno like '20180326%' ORDER BY (CONVERT(INT,Right(o.batchno, Len(o.batchno)-9))) desc;
还是老样子,我就去吃shi.
@Shendu.cc: column "int" does not exist
@如梦一场: 你用的是什么数据库Mysql,还是Oracle还是SqlServer
@Shendu.cc: PostgreSQL 不好意思问题忘记说数据库了。。。
@如梦一场: PostgreSQL 应该没有INT类型,你用Integer 或者numeric试试。
@Shendu.cc: 老哥不行,他这提示的是列不存在,他好像把Integer 当成是列名了,而不是转换成int类型
@如梦一场: 我知道了,你使用cast ( Right(o.batchno,Len(o.batchno)-9) as numeric ) 来转换类型。还好RostgreSql 支持Right,Length字符串函数。
@Shendu.cc: 应该是length不是len,谢谢老哥
@如梦一场: 不同的数据库,函数都不一样~
@Shendu.cc: 谢谢啦
@如梦一场: 不客气!
这设计数据库的人投资了英特尔股票吧?
这么设计数据库很锻炼程序员的歪门邪道思维啊。
你可以这么来
Select * from data-_syfr o order by len(o.batchno) desc, o.batchno desc
select o.id as id ,o.uniscid as uniscid, o.regno as regno , o.entname as entname,o.batchno as batchno from data_syfr_tem o where o.batchno like '"+date+ "%' "
+ "order by (cast(right(o.batchno,length(o.batchno)-9) as int)) desc
这种是对我这个数据库正确的写法,谢谢你啦
多重排序
用字符串截取函数取得左侧的日期,按升序排列,用字符串截取函数取得右侧的编号并把它转换为整型,按降序排列。
伪代码 order by 日期 asc , 编号 desc
至于PostgreSQL 里 字符串函数和数据类型转换函数怎么用,你得自己查文档。
谢谢你我解决啦