其实原来我是想你自己决定
到底这些的转换是在 查询里面 运行? 还是在窗体报表里面运行?
譬如:A) 查询里面不做任何的转换 就输出 [日期],
然后窗体或者报表上
1. 控件 显示 日期 : =CDateTime([日期])
2. 控件 1: =IIF( [日期]=#1900/1/1#,"不详", CDateTime([日期]))
3. 控件 2: =CYear( [日期]) <- 另外做个简短版的函数吧
4. 控件 3: =IIF( [日期]=#1900/1/1#,"不详", CYear([日期]))
其实根本不需要在查询里面做任何转换的!
b) 当然如果查询有 输出 [日期], [中文日期]: CDataTime([日期])
然后窗体或者报表上
1. 控件 显示 日期 : =[中文日期]
2. 控件 1: =IIF( [日期]=#1900/1/1#,"不详",[中文日期])
3. 控件 2: =Left( [中文日期],5) <- 另外做个简短版的函数吧
4. 控件 3: =IIF( [日期]=#1900/1/1#,"不详", Left( [中文日期],5))
C) 当然如果查询有 输出 [日期], [中文日期]: CDataTime([日期]), [中文年份]: CYear([日期])
然后窗体或者报表上
1. 控件 显示 日期 : =[中文日期]
2. 控件 1: =IIF( [日期]=#1900/1/1#,"不详",[中文日期])
3. 控件 2: = [中文年份] <- 另外做个简短版的函数吧
4. 控件 3: =IIF( [日期]=#1900/1/1#,"不详", [中文年份])
至于哪个设计好,就要看你 预算哪个产生最低运算时间的几率了!这个我帮不了你!
如果你数量特别庞大的话,我甚至建议你建立三个表
中文年:放一万年记录够用了吧
中文月:12条记录
中文日:31条记录
select 日期, 中文年.年份, 中文月.月份, 中文日.日数
from [数据]
left join 中文年 on year([数据].[日期] = 中文年.id
left join 中文月 on month([数据].[日期] = 中文月.id
left join 中文日on day([数据].[日期] = 中文日.id
甚至把两千年历史+未来30年 所有转换好日期的数据表,才70万条记录,16G数据,为了快速自己决定还是值得!
这一招是 爱恩斯坦的相对论里面,“乾坤大挪移” 中其中一式 “空间换取时间”!
不过还有一招要告诉你的 也是来自 爱恩斯坦的相对论有应用到的蝴蝶效应,大西洋的蝴蝶们拍的翅膀,影响着太平洋龙卷风的方向;意思是 你可以在用户录入数据的时候就转换好这个中文日期,这是借用众多操作用户的电脑处理能力,分担了以后服务器的压力,然后所有的窗体、报表 就提取显示,一点都不拖慢!