令人费解的'1' '-'排序,那位高人给解释一下

8992026 2004-04-30 08:45:54
select a='-' into #t
union all select '1'
union all select '--'
union all select '-1'
union all select '1-'
union all select '11'
union all select '---'
union all select '--1'
union all select '-1-'
union all select '-11'
union all select '1--'
union all select '1-1'
union all select '11-'
union all select '111'

select * from #t order by a

drop table #t

结果:
a
----
-
--
---
1
-1
--1
-1-
1-
1--
11
-11
1-1
11-
111

(所影响的行数为 14 行)

为什么这个次序??
...全文
101 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
8992026 2004-05-05
  • 打赏
  • 举报
回复
你提前的太频繁了!!!
8992026 2004-05-04
  • 打赏
  • 举报
回复

realgz 2004-04-30
  • 打赏
  • 举报
回复
正好 今天接到老板的邮件不爽,走水想问题,拖多爽啊。。。。。。谢谢楼主的题目。
realgz 2004-04-30
  • 打赏
  • 举报
回复
有头绪了,确实是2字节到4字节的问题,但是没把机制想清楚,于是是没想好具体证明的查询怎么写,没办法圆满证明。。。。。慢慢想,5.1不还有7天吗,我不急。
8992026 2004-04-30
  • 打赏
  • 举报
回复
等ing
realgz 2004-04-30
  • 打赏
  • 举报
回复
这样解释不同,但还是觉得我的方向是正确的,分析方法还不够完善,等到晚上我看能不能写个论证出来。
xiao_bai 2004-04-30
  • 打赏
  • 举报
回复
来学习一下,我觉得问题出在对中文的处理上,具体怎么排的只有微软知道了
8992026 2004-04-30
  • 打赏
  • 举报
回复
结果:
a
----------- ----------- ----------- --------------------
45 32 32 -
45 45 32 --
45 45 45 ---
49 32 32 1
45 49 32 -1
45 45 49 --1
45 49 45 -1-
49 45 32 1-
49 45 45 1--
49 49 32 11
45 49 49 -11
49 45 49 1-1
49 49 45 11-
49 49 49 111

(所影响的行数为 14 行)

8992026 2004-04-30
  • 打赏
  • 举报
回复
realgz(realgz) :
你的理论根本就不行,看这个
create table #t(a char(20))
insert #t
select a='-'
union all select '1'
union all select '--'
union all select '-1'
union all select '1-'
union all select '11'
union all select '---'
union all select '--1'
union all select '-1-'
union all select '-11'
union all select '1--'
union all select '1-1'
union all select '11-'
union all select '111'

select unicode(substring(a,1,1)),unicode(substring(a,2,1)),unicode(substring(a,3,1)),* from #t order by a

8992026 2004-04-30
  • 打赏
  • 举报
回复
realgz(realgz) :
这样解释不通的
select unicode(substring(a,1,1)),unicode(substring(a,2,1)),unicode(substring(a,3,1)),* from #t order by a

结果:
a 按你的解释
----------- ----------- ----------- ----
45 NULL NULL - 0045
45 45 NULL -- 4545
45 45 45 --- 4545
49 NULL NULL 1 0049
45 49 NULL -1 4945 --关键这一行和下两行
45 45 49 --1 4545
45 49 45 -1- 4945
49 45 NULL 1-
49 45 45 1--
49 49 NULL 11
45 49 49 -11
49 45 49 1-1
49 49 45 11-
49 49 49 111

(所影响的行数为 14 行)
realgz 2004-04-30
  • 打赏
  • 举报
回复
可以看见,除非在比较的时候是2D31和31比,否则没有可能 2D>31
所以你的字段如果足够长,理论上就没有这个问题了。
8992026 2004-04-30
  • 打赏
  • 举报
回复
分大把,看来现在结论只能是用Chinese_PRC_CI_AS排序规则的时候要小心点

realgz 2004-04-30
  • 打赏
  • 举报
回复
-1 2D 31
1 31
10 31 30
11 31 31
可以看到,以上字符的二进制表示
唯一的合理解释似乎是在中文状态下用4个字节表示一个字符,所以 SQL 自动取每4个字节进行比较
if '-1'>'1' COLLATE SQL_Latin1_General_Cp437_CS_AS
print 'surprise! -1>1'
使用2个字节的排序规则自然搞定

if '-1'>'1' COLLATE Chinese_Taiwan_Stroke_CI_AS
print 'surprise! -1>1'
4字节的就有问题 搞定1
txlicenhe 2004-04-30
  • 打赏
  • 举报
回复
偶来看看有没有分剩下。
outwindows 2004-04-30
  • 打赏
  • 举报
回复
Chinese_PRC_CI_AS
8992026 2004-04-30
  • 打赏
  • 举报
回复
order by replace(a,'-','0')
可以解决,只可惜索引白建了
JerryOne 2004-04-30
  • 打赏
  • 举报
回复
目前还没有遇见过这样的问题!
Mark
outwindows 2004-04-30
  • 打赏
  • 举报
回复
gz...
realgz 2004-04-30
  • 打赏
  • 举报
回复
if '-1'>'1' COLLATE Chinese_PRC_CI_AS
print 'surprise! -1>1'

if '-1'>'10' COLLATE Chinese_PRC_CI_AS
print 'surprise! -1>10'
pbsql 2004-04-30
  • 打赏
  • 举报
回复
想了半天,可能是SQL将“-”当成通配符了,所以“-”可能排在“1”前面也可能在后面

这样可以避免:(“0”可以由不引起歧义的任意字符代替)
order by replace(a,'-','0')
加载更多回复(31)
内容概要:本文围绕基于Boost MPPT与双PI闭环双向DC-DC的离网光伏储能系统展开,系统性地研究了其动力学建模与稳态特性分析,并通过Simulink平台实现了完整的仿真验证。研究构建了涵盖光伏阵列、最大功率点跟踪(MPPT)控制、双向DC-DC变换器及储能电池的整体系统架构,采用Boost电路实现高效MPPT控制,并引入电压-电流双闭环PI控制策略,实现对储能系统精确的充放电管理。文章深入分析了系统在光照强度与环境温度双重扰动下的动态响应与稳态性能,验证了所提出模型的准确性与控制策略在不同工况下的鲁棒性与有效性,为离网光伏储能系统的优化设计与工程应用提供了坚实的理论基础和仿真依据。; 适合人群:具备电力电子技术、新能源系统或自动控制理论等相关专业知识背景,从事光伏储能系统、微电网或可再生能源领域研究与仿真的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握离网光伏储能系统的完整建模方法与关键参数设计流程;② 深入理解Boost电路MPPT控制与双向DC-DC变换器双PI闭环控制的协同工作机制与实现细节;③ 通过Simulink仿真分析系统在光照突变、温度变化等动态扰动下的稳态特性、电压稳定性和能量管理性能;④ 为实际离网系统的控制器设计、参数整定及性能优化提供可靠的理论指导和仿真验证手段。; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点关注MPPT算法的实现逻辑、双PI控制器的参数整定方法以及系统在不同环境条件和负载变化下的响应特性,可在此基础上进一步探索多目标优化控制或智能控制策略的应用。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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