ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10305|回复: 25

[原创] 用 SQL挑战传统方式--用数据透视表做的日历

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-6 05:01 | 显示全部楼层 |阅读模式
今天看到yanjie 版主的 “[分享]用数据透视表做的日历(加入excel2007做的自动翻页)”  很火
http://club.excelhome.net/thread-262469-1-1.html

我用SQL用一列(字段名为DATE)数据源来达到同样效果。
其实yanjie版版的数据源说白了就一列,其他都是派生的,悄悄的告诉你,我都没找到他的数据源
SQL语句贴出来:
select year(DATE) as 年,month(DATE) as 月份,weekday(DATE) as 星期,day(DATE) as 天,int((DATE-cdate(YEAR(DATE)&",1,1")+1) / 7) as num,year(DATE) & '年-' & IIF((DATE-cdate(YEAR(DATE)&",1,1")+1) / 7-num>0,1,0)+num & '周' as 周数 from [Sheet1$]

透视表日历.jpg

工作表中左边是传统方式的结果,右边是用SQL做出来的结果

[ 本帖最后由 Scarlett_88 于 2009-6-6 05:22 编辑 ]

透视表日历.rar

448.83 KB, 下载次数: 571

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-6 06:44 | 显示全部楼层
真好。实在佩服。

TA的精华主题

TA的得分主题

发表于 2009-6-6 07:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-6 08:02 | 显示全部楼层
原帖由 Scarlett_88 于 2009-6-6 05:01 发表
今天看到yanjie 版主的 “[分享]用数据透视表做的日历(加入excel2007做的自动翻页)”  很火
http://club.excelhome.net/thread-262469-1-1.html

我用SQL用一列(字段名为DATE)数据源来达到同样效果。
其实yanj ...

周数用DATEPART('WW',DATE) 代替

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-6 08:18 | 显示全部楼层
原帖由 小蚁雄兵 于 2009-6-6 08:02 发表

周数用DATEPART('WW',DATE) 代替


今天找到这个函数,还没试,用这个函数就要改一下SQL语句:

select year(DATE) as 年,month(DATE) as 月份,weekday(DATE) as 星期,day(DATE) as 天,year(DATE) & '年-' & DATEPART('WW',DATE-1) & '周' as 周数 from [Sheet1$]

TA的精华主题

TA的得分主题

发表于 2009-6-6 08:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Scarlett_88 是高手,一出就是精品,建议加分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-6 08:27 | 显示全部楼层
日期函数

VBA 函数                              Transact-SQL
                                      标量函数
------------------------------------------------
Date(x)                               CONVERT(DATETIME,CONVERT(varchar,GETDATE(x)))
Dateadd("<Access datepart>",x,y)      DATEADD(<SQL Server datepart>, x, y)
Datediff("<Access datepart>",x,y)     DATEDIFF(<SQL Server datepart>, x, y)
Datepart("<Access datepart>", x)      DATEPART(<SQL Server datepart>, x)
Day(x)                                DATEPART(dd,x)
Hour(x)                               DATEPART(hh,x)
Minute(x)                             DATEPART(mi,x)
Month(x)                              DATEPART(mm,x)
Now(x)                                GETDATE(x)
Second(x)                             DATEPART(ss,x)
Weekday(x)                            DATEPART(dw,x)
Year(x)                               DATEPART(yy,x)

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-6 08:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
字符串函数

VBA 函数       Transact-SQL
               标量函数
------------------------------------------------
Asc(x)         ASCII(x)
Chr$(x)        CHAR(x)
Lcase$(x)      LCASE(x)
               LOWER(x)
Len(x)         DATALENGTH(x)
Ltrim$( x)     LTRIM(x)
Mid$(x,y,z)    SUBSTRING(x,y,z)
Right$(x,y)    RIGHT(x,y)
Rtrim$(x)      RTRIM(x)
Space$(x)      SPACE(x)
Str$(x)        STR(x)
Ucase$( x)     UCASE(x)
               UPPER(x)



转换函数

VBA 函数       Transact-SQL
               标量函数
------------------------------------------------
Ccur(x)        CONVERT(money,x)
Cdbl(x)        CONVERT(float,x)
Cint(x)        CONVERT(smallint,x)
Clng(x)        CONVERT(int,x)
Csng(x)        CONVERT(real,x)
Cstr(x)        CONVERT(varchar,x)
Cvdate(x)      CONVERT(datetime,x)

TA的精华主题

TA的得分主题

发表于 2009-6-6 08:31 | 显示全部楼层
原帖由 Scarlett_88 于 2009-6-6 08:18 发表


今天找到这个函数,还没试,用这个函数就要改一下SQL语句:

select year(DATE) as 年,month(DATE) as 月份,weekday(DATE) as 星期,day(DATE) as 天,year(DATE) & '年-' & DATEPART('WW',DATE-1) & '周' as 周 ...

不明白,为何DATE要减1?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-6 08:37 | 显示全部楼层
返回一个包含已知日期的指定时间部分的 Variant (Integer)。

语法

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

DatePart 函数语法中有下列命名参数:

部分 描述
interval 必要。字符串表达式,是要返回的时间间隔。
date 必要。要计算的 Variant (Date) 值。
Firstdayofweek 可选。指定一个星期的第一天的常数。如果未予指定,则以星期日为第一天。
firstweekofyear 可选。指定一年第一周的常数。如果未予指定,则以包含 1 月 1 日的星期为第一周。



设置

interval 参数的设定值如下:

设置 描述
yyyy 年
q 季
m 月
y 一年的日数
d 日
w 一周的日数
ww 周
h 时
n 分钟
s 秒



firstdayofweek 参数的设定值如下:

常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbSunday 1 星期日(缺省值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六



firstweekofyear 参数的设定值如下:

常数 值 描述
vbUseSystem 0 使用 NLS API 设置。
vbFirstJan1 1 从包含 1 月 1 日的星期开始(缺省值)。
vbFirstFourDays 2 从第一个其大半个星期在新的一年的一周开始。
vbFirstFullWeek 3 从第一个无跨年度的星期开始。



说明

DatePart 函数可以用来计算日期并返回指定的时间间隔。例如,可以使用DatePart 计算某个日期是星期几或目前为几点钟。

firstdayofweek 参数会影响使用时间间隔符号 “W” 或 “WW” 计算的结果。

如果 date 是日期文字,则指定的年份成为该日期的固定部分。但是,如果 date 用双引号 (" ") 括起来,且年份略而不提,则在每次计算 date 表达式时,当前年份都会插入到代码之中。这样就可以书写适用于不同年份的程序代码。

DatePart 函数示例
本示例先取得一个日期,然后使用 DatePart 函数显示该日期是发生在该年的哪一季。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-14 21:37 , Processed in 0.047133 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表