| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2882 人关注过本帖
标题:以文本类型保存的日期,在排序是如何按升序进行排序???
只看楼主 加入收藏
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
结帖率:100%
收藏
 问题点数:0 回复次数:14 
以文本类型保存的日期,在排序是如何按升序进行排序???
我的数据库MYDATE字段是以文本型的形式保存日期(****年*月)的,在进行按升序进行排序时,10月、11月、12月排在1月的上面,而不是排在9月的下面,但我又不想更改MYDATE字段的数据类型为 datetime ,在这种情况下如何才能实现排序是按升序进行排序的???
SqlCommand cmdSel = new SqlCommand("select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'A',max(case Wjlx when 2 then wjlj else '' end) as N'AA',max(case Wjlx when 3 then wjlj else '' end) as N'AAA',max(case Wjlx when 4 then wjlj else '' end) as N'AAAA' from baobiao group by mydate", conn1); //创建DataAdapter(数据适配器)

da1.SelectCommand = cmdSel;

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 文本 数据库 类型 case max 
2007-03-22 16:04
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
在进行按升序进行排序时,10月、11月、12月排在1月的上面,而不是排在9月的下面,

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-22 17:08
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
sql语句中 最后加上这个
order by case when len(mydate) = 7 then left(mydate,5)+'0'+ right(mydate,2) else mydate end
因为只用过英文版 不知道汉字是否算双字节。 如果汉字双字节
order by case when len(mydate) = 9 then left(mydate,6)+'0'+ right(mydate,3) else mydate end


2007-03-22 17:19
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
汉字是按双字节的

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-03-22 17:23
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 
谢谢!但加了上述语句上去,还是10月、11月、12月排在1月的上面,是不是因为数据表的MYDATE字段的数据类型是 文本 而不是 日期 导致的???
SqlCommand cmdSel2 = new SqlCommand("select mydate,max(case Wjlx when 1 then wjlj else '' end) as N'A',max(case Wjlx when 2 then wjlj else '' end) as N'AA',max(case Wjlx when 3 then wjlj else '' end) as N'AAA',max(case Wjlx when 4 then wjlj else '' end) as N'AAAA' from baobiao where MYDATE LIKE '%2006%' group by mydate order by case when len(mydate) = 9 then left(mydate,6)+'0'+ right(mydate,3) else mydate end", conn1); //创建DataAdapter(数据适配器)

da1.SelectCommand = cmdSel2;

图片附件: 游客没有浏览图片的权限,请 登录注册

[此贴子已经被作者于2007-3-22 17:48:51编辑过]


我是2.0超级菜鸟,请多多教导!
2007-03-22 17:47
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 
谢谢!经测试:
用 order by case when len(mydate) = 9 then left(mydate,6)+'0'+ right(mydate,3) else mydate end 不行!

用 order by case when len(mydate) = 7 then left(mydate,5)+'0'+ right(mydate,2) else mydate end 就解决这个问题了。

如此说来, 岂不是 汉字 不是 按双字节的,而是按单字节的 ???




我是2.0超级菜鸟,请多多教导!
2007-03-23 09:28
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
看结果好像是这样。。。

2007-03-23 11:02
xiyou419
Rank: 1
等 级:新手上路
威 望:2
帖 子:104
专家分:0
注 册:2007-3-18
收藏
得分:0 
其实也可以在输入数据时将"2007年1月20"输入成"2007年01月20日"
这样就可以在"2007年10月20"之前排列了!

道德往往可以弥补智慧的缺陷;但智慧永远不能填补道德的空白.
2007-03-24 18:51
xiyou419
Rank: 1
等 级:新手上路
威 望:2
帖 子:104
专家分:0
注 册:2007-3-18
收藏
得分:0 
对了,还有一点,按这样说,那在SQL中,汉字是单字节的,这个不 符合啊.
看下面这个例子:
declare @text char(50)
set @text='2007年1月'
set @text=left(@text,5) + '0' + right(@text,2)
print @text
输出结果就不对了,换成这样就对了:
declare @text varchar(50)
set @text='2007年1月'
set @text=left(@text,5) + '0' + right(@text,2)
print @text

这个是什么原因?

道德往往可以弥补智慧的缺陷;但智慧永远不能填补道德的空白.
2007-03-24 19:03
初学Delphi
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:330
专家分:0
注 册:2006-4-4
收藏
得分:0 

我这边汉字的时候单字节就对了
if exists(select * from sysobjects where name='table1')
drop table table1
create table table1(id int identity(1,1) primary key,
shijian varchar(50))
insert into table1 select '2007年3月' union all select '2007年11月' union all select '2007年2月'
select cast((case len(shijian) when 8 then REPLACE (REPLACE(shijian,'年',''),'月','02') else REPLACE (REPLACE(shijian,'年','0'),'月','01') end) as datetime) as 时间 from table1
换成10就不对了

2007-03-26 13:52
快速回复:以文本类型保存的日期,在排序是如何按升序进行排序???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090202 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved