我在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) ")