SQL的排序问题

netcup 2009-07-16 11:34:32
表中字段JWH是CHAR(10)
JWH内容
A1-1
A1-2
A2-1
A2-4
A3-1
A20-1
A9-1
A9-3
B1-2
B3-2
B10-2
B9-3
等等
为什么 ORDER BY JWH 后,结果是下面的,注意9的排序
A1-1
A1-2
A20-1
A2-1
A2-4
A3-1
A9-1
A9-3
B1-2
B10-2
B3-1
B9-3

似乎只排序到A1这两位数字上。A10就在A2前面,9反而成了最后了
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2009-07-16
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-07-16 11:39:32
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([aaa] varchar(5))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A20-1' union all
select 'A9-1' union all
select 'A9-3' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B10-2' union all
select 'B9-3'
--------------开始查询--------------------------

select * from [tb] order by charindex('-',aaa)
----------------结果----------------------------
/*aaa
-----
A1-1
A1-2
A2-1
A2-4
A3-1
A9-1
A9-3
B1-2
B3-2
B9-3
B10-2
A20-1

(所影响的行数为 12 行)
*/
华夏小卒 2009-07-16
  • 打赏
  • 举报
回复
先按照ABCD...
再按1234.。。
xsm545 2009-07-16
  • 打赏
  • 举报
回复
顶..都是高人啊
xiaoliaoyun 2009-07-16
  • 打赏
  • 举报
回复

if object_id('[tb]') is not null drop table [tb]
create table [tb]([aaa] char(10))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A9-1' union all
select 'A9-3' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A20-1' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B10-21' union all
select 'B10-9' union all
select 'B9-3'

SELECT *
FROM [tb]
ORDER BY LEFT(aaa,1)
,CAST(SUBSTRING(aaa,2,CHARINDEX('-',aaa) - 2 ) AS INT)
,CAST(SUBSTRING(aaa,CHARINDEX('-',aaa) + 1,LEN(aaa) - CHARINDEX('-',aaa)) AS INT)
linguojin11 2009-07-16
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
create table [tb]([aaa] varchar(5))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A20-1' union all
select 'A9-1' union all
select 'A9-3' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B10-2' union all
select 'B9-3'
select * from tb order by substring(aaa,1,1),cast(substring(aaa,2,charindex('-',aaa)-2) as int)
----
(12 行受影响)
aaa
-----
A1-1
A1-2
A2-1
A2-4
A3-1
A9-1
A9-3
A20-1
B1-2
B3-2
B9-3
B10-2

(12 行受影响)
-----
feixianxxx 2009-07-16
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================

if object_id('[tb]') is not null
drop table [tb]
go
create table [tb]([aaa] varchar(5))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A9-1' union all
select 'A20-1' union all
select 'A9-3' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B10-2' union all
select 'B9-3'
go
select aaa from tb
order by left(aaa,1),RIGHT(aaa,LEN(aaa)-CHARINDEX('-',aaa)),
case when substring(aaa,2,CHARINDEX('-',aaa)-2)<10 then '0'+substring(aaa,2,CHARINDEX('-',aaa)-2) else substring(aaa,2,CHARINDEX('-',aaa)-2) end
/*------------

(
(12 行受影响)
aaa
-----
A1-1
A2-1
A3-1
A9-1
A20-1
A1-2
A9-3
A2-4
B1-2
B3-2
B10-2
B9-3

(12 行受影响)


-------*/
feixianxxx 2009-07-16
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================

if object_id('[tb]') is not null
drop table [tb]
go
create table [tb]([aaa] varchar(5))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A9-1' union all
select 'A8-1' union all
select 'A9-3' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B7-2' union all
select 'B9-3'
go
select aaa from tb
order by left(aaa,1),RIGHT(aaa,LEN(aaa)-CHARINDEX('-',aaa)),substring(aaa,2,CHARINDEX('-',aaa)-2)
/*------------

(12 行受影响)
aaa
-----
A1-1
A2-1
A3-1
A8-1
A9-1
A1-2
A9-3
A2-4
B1-2
B3-2
B7-2
B9-3
-------*/
feixianxxx 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 netcup 的回复:]
我需要按A1-1,A2-1......A9-1,A10-1...A20-1这样正常排序排列下去,如何ORDER by呢?
[/Quote]
那B1-1是不是排在A9-3
后面阿
zc_0101 2009-07-16
  • 打赏
  • 举报
回复

--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([aaa] varchar(5))
insert [tb]
select 'A1-1' union all
select 'A1-2' union all
select 'A2-1' union all
select 'A2-4' union all
select 'A3-1' union all
select 'A20-1' union all
select 'A9-1' union all
select 'A9-3' union all
select 'B1-2' union all
select 'B3-2' union all
select 'B10-2' union all
select 'B9-3'


select * from tb order by substring(aaa,1,1) asc, charindex('-',aaa) asc
/*
A1-1
A1-2
A2-1
A2-4
A3-1
A9-1
A9-3
A20-1
B1-2
B3-2
B9-3
B10-2
*/
netcup 2009-07-16
  • 打赏
  • 举报
回复
我需要按A1-1,A2-1......A9-1,A10-1...A20-1这样正常排序排列下去,如何ORDER by呢?
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧