以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于日期分组(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=10550)

--  作者:yyzlxc
--  发布时间:2011/6/11 12:35:00
--  关于日期分组(已解决)

按年、月分组,因为每月25日为结转日,要求[月]列:月份不等于12,且日期大于25的月份为下个月,如何实现,恳请指教!

 


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2011-6-13 12:51:14编辑过]

--  作者:ybil
--  发布时间:2011/6/11 13:08:00
--  
参考:
http://www.datasoft.com.cn/dispbbs.asp?boardid=2&id=1084&authorid=0&page=0&star=1
--  作者:yyzlxc
--  发布时间:2011/6/11 13:36:00
--  
谢谢 ybil 的指教,其他月份都没有问题,就是十二月份的26-31号还是按12月分组,如何实现,再次请教!!
--  作者:yyzlxc
--  发布时间:2011/6/11 13:40:00
--  
还有,1月份的1,最好用01来表示,这样在筛选树上比较美观!!
--  作者:ybil
--  发布时间:2011/6/11 14:55:00
--  
IIF(Len(Convert(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,IIF(SUBSTRING(Convert([日期],\'System.String\'),7,1) = \'-\',1,2)),\'System.Int16\')+IIF(SUBSTRING(Convert([日期],\'System.String\'),8,3) in (\'-26\',\'-27\',\'-28\',\'-29\',\'-30\',\'-31\',\'26\',\'27\',\'28\',\'29\',\'30\',\'31\') and SubString(Convert([日期],\'System.String\'),6,IIF(SubString(Convert([日期],\'System.String\'),7,1) = \'-\',1,2))<>\'12\',1,0),\'System.String\')) = 1,\'0\', \'\')+Convert(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,IIF(SUBSTRING(Convert([日期],\'System.String\'),7,1) = \'-\',1,2)),\'System.Int16\')+IIF(SUBSTRING(Convert([日期],\'System.String\'),8,3) in (\'-26\',\'-27\',\'-28\',\'-29\',\'-30\',\'-31\',\'26\',\'27\',\'28\',\'29\',\'30\',\'31\') and SubString(Convert([日期],\'System.String\'),6,IIF(SubString(Convert([日期],\'System.String\'),7,1) = \'-\',1,2))<>\'12\',1,0),\'System.String\')


--  作者:yyzlxc
--  发布时间:2011/6/11 15:25:00
--  
谢谢 ybil 的指教,表达式可以达到要求,需要消化一下,再次感谢 ybil !!
--  作者:yyzlxc
--  发布时间:2011/6/11 20:17:00
--  

参考 ybil 版主的代码,对表达式进行简化如下:

 

iif(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,2),\'System.Int16\')<>12,iif(Convert(SUBSTRING(Convert([日期],\'System.String\'),9,2),\'System.Int16\')>25,Convert(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,2),\'System.Int16\')+1,\'System.String\'),SUBSTRING(Convert([日期],\'System.String\'),6,2)),SUBSTRING(Convert([日期],\'System.String\'),6,2))

 

这段代码已经基本符合要求,但是当日期大于25时,月份加1后,1-8月份只能显示一位数,而小于25时可以显示两位数。用字符格式化Format(X,"00") 出错,如何达到与 ybil 版主代码一样的效果,求指教!!


--  作者:hhbb
--  发布时间:2011/6/11 21:14:00
--  
iif(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,2),\'System.Int16\') < 12,
iif(Convert(SUBSTRING(Convert([日期],\'System.String\'),9,2),\'System.Int16\')>25,
\'0\'+Convert(Convert(SUBSTRING(Convert([日期],\'System.String\'),6,2),\'System.Int16\')+1,\'System.String\')
,SUBSTRING(Convert([日期],\'System.String\'),6,2)),
SUBSTRING(Convert([日期],\'System.String\'),6,2))

--  作者:yyzlxc
--  发布时间:2011/6/11 21:37:00
--  
谢谢 hhbb ,完全达到理想的效果,通过这段代码,学到不少的知识,非常感谢foxtable论坛的热心人,帮助我树立学习foxtabie的信心!
--  作者:hhbb
--  发布时间:2011/6/11 22:35:00
--  
8樓有點問題,修正一下:
IIF(SubString(Convert([日期],\'System.String\'),6,2) > \'09\' or SubString(Convert([日期],\'System.String\'),6,2) = \'09\'  and SubString(Convert([日期],\'System.String\'),9,2) > \'26\',\'\',\'0\')+(IIF(SubString(Convert([日期],\'System.String\'),6,2) = \'12\' or SubString(Convert([日期],\'System.String\'),9,2) < \'26\',0,1)+Convert(SubString(Convert([日期],\'System.String\'),6,2),\'System.Int16\'))

或:
IIF(IIF(SubString(Convert([日期],\'System.String\'),6,2) = \'12\' or SubString(Convert([日期],\'System.String\'),9,2) < \'26\',0,1)+Convert(SubString(Convert([日期],\'System.String\'),6,2),\'System.Int16\') > 9,\'\',\'0\')+(IIF(SubString(Convert([日期],\'System.String\'),6,2) = \'12\' or SubString(Convert([日期],\'System.String\'),9,2) < \'26\',0,1)+Convert(SubString(Convert([日期],\'System.String\'),6,2),\'System.Int16\'))