求一SQL特殊排序

我在T_QJJC中有一個期間字段﹕ZZKJQJ  C(10)
字段中的內容舉例如下﹕
2005年9月﹑2005年10月﹑2005年11月﹑2005年12月﹑2006年1月﹑.....2006年9月﹑2006年10月﹑
2006年11月﹑2006年12月﹑2007年1月   

當然﹐會有重復記錄的。

要求如下﹕我要取出最大的兩個會計期間。我這里的最大是指此例中的2006年12月﹑2007年1月﹐而不是普通的字符排序﹐該怎么去取呢﹖

一﹑會計期間從大排到小
方法(1)
select zzkjqj from t_qjjc group by zzkjqj order by substring(zzkjqj,1,5)+cast( cast(substring(replace(zzkjqj,'月',''),6,2) as int)+10 as char) desc
方法(2)
select zzkjqj from t_qjjc group by zzkjqj order by case  len( rtrim( ltrim(zzkjqj))) when 8 then  replace(zzkjqj,'年','') when 7 then  replace(zzkjqj,'年','0') end
二﹑取最大會計期間
方法(1)
select top 1 zzkjqj from t_qjjc group by zzkjqj order by substring(zzkjqj,1,5)+cast( cast(substring(replace(zzkjqj,'月',''),6,2) as int)+10 as char) desc
方法(2)
select zzkjqj from t_qjjc group by zzkjqj order by case  len( rtrim( ltrim(zzkjqj))) when 8 then  replace(zzkjqj,'年','') when 7 then  replace(zzkjqj,'年','0') end
方法(3)
select min(zzkjqj) kjqj from (select max(zzkjqj) zzkjqj from  t_qjjc where substring(zzkjqj,7,1)<>'月'  union all select max(zzkjqj) zzkjqj from t_qjjc where  substring(zzkjqj,7,1)='月') aa where substring(zzkjqj,1,5) in(select substring(max(zzkjqj),1,5) from t_qjjc)
三﹑小于或小于等于(ntj)某一會計期間(nkjqj)
方法(1)
WHERE (ZZKJQJ<'"+SUBSTR(nKJQJ,1,6)+"10月' OR ZZKJQJ"+ALLTRIM(THISFORM.combo2.VALUE)+"'"+nKJQJ+"'"+IIF(LEN(nKJQJ)=9," AND "," OR SUBSTRING(ZZKJQJ,1,4)='"+SUBSTR(nKJQJ,1,4)+"' AND ")+"LEN(LTRIM(RTRIM(ZZKJQJ)))=7)
方法(2)
 where substring(zzkjqj,1,4)=substring(nkjqj,1,4) and cast(substring(replace(zzkjqj,'月',''),6,2) as int)<cast(substring(replace(nkjqj,'月',''),6,2) as int) or  substring(zzkjqj,1,4)<substring(nkjqj,1,4)
四﹑大于或大于等于(ntj)某一會計期間(nkjqj)
方法(1)
WHERE (ZZKJQJ>'"+SUBSTR(nKJQJ,1,6)+"9月' OR ZZKJQJ"+ALLTRIM(THISFORM.combo2.VALUE)+"'"+nKJQJ+"'"+IIF(LEN(nKJQJ)=9," OR SUBSTRING(ZZKJQJ,1,4)='"+SUBSTR(nKJQJ,1,4)+"' AND "," AND ")+"LEN(LTRIM(RTRIM(ZZKJQJ)))=8)
方法(2)
 where substring(zzkjqj,1,4)=substring(nkjqj,1,4) and cast(substring(replace(zzkjqj,'月',''),6,2) as int)>cast(substring(replace(nkjqj,'月',''),6,2) as int) or  substring(zzkjqj,1,4)>substring(nkjqj,1,4)
  五﹑小于或小于等于﹐等于﹐大于或等于(ntj)某一會計期間(nkjqj)
"where substring(zzkjqj,1,4)=substring(?nkjqj,1,4) and cast(substring(replace(zzkjqj,'月',''),6,2) as int)"+ntj+str(val(substr(nkjqj,7,2)),2,0)+iif(ntj="=",""," or  substring(zzkjqj,1,4)"+strtran(ntj, '=', '')+"substring(?nkjqj,1,4) ")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值