日期:2014-05-16  浏览次数:20545 次

SQL排序
有个表 table
按其中一个字段排序,这个字段ph
但是这个字段有下面一些值(拉出其中一段)
101201
101202
101203
101204
101205
101206
101207
101208
101209
101210
1012100
1012101
1012102
1012103
1012104
1012105
1012106
1012107
1012108
1012109
101211
1012110
1012111
1012112
101212
101213
101214
101215
101216
101217
101218
101219
101220
101221
101222
101223
101224
101225
101226
101227
101228
101229
101230
101231
101232
101233
101234
101235
101236
101237
101238
101239
101240
101241
101242
101243
101244
101245
101246
101247
101248
101249
101250
101251
101252
101253
101254
101255
101256
101257
101258
101259
101260
101261
101262
101263
101264
101265
101266
101267
101268
101269
101270
101271
101272
101273
101274
101275
101276
101277
101278
101279
101280
101281
101282
101283
101284
101285
101286
101287
101288
101289
101290
101291
101292
101293
101294
101295
101296
101297
101298
101299当我select * from table order by ph asc,但是我要的效果不是这样的,注意看标注红色的,我是要类似101209后面是101210,然后继续101211总之是前面四位要保持一定的排序譬如我前四位是1011***,那么1011***所有的肯定要在1012之前,但是在1012这里面,后面几位,又按照0,1,2,3,~100……max,排序
------解决方案--------------------
select * from table order by cast(left(ph,4) as int) , cast(substring(ph,5,len(ph)) as int)