找回密码
 立即注册

QQ登录

只需一步,快速开始

MatrixTian 讲师达人认证 悬赏达人认证

高级会员

141

主题

211

帖子

1380

积分

高级会员

积分
1380

微信认证勋章讲师达人元老葡萄悬赏达人

MatrixTian 讲师达人认证 悬赏达人认证
高级会员   /  发表于:2020-9-14 15:54  /   查看:3814  /  回复:0
本帖最后由 Felix.Li 于 2023-1-5 19:08 编辑


表达式中datepart函数用法及其与sqlserver depart函数、Mysql week函数的差异

Wyn Reports支持丰富的函数,这些函数是实现各种计算需求的表达式的基础。
DatePart函数一个日期类函数,返回一个 Integer 值,其中包含给定 Date 值的指定部分(年,月,日,时,分,秒,毫秒,星期几等)。如DatePart("m","2017-11-2")返回月份11。
DatePart函数用法:
语法:
DatePart(<时间单位>, <日期时间值>[, <一周的第一天>[, <一年的第一周>]])
说明:
返回一个整型(Integer)值,其中包含给定 Date 值的指定部分(年,月,日,时,分,秒,毫秒,星期几等)。
示例:
=DatePart("m", Fields!SaleDate.Value)


例如:
获取今天:2020-09-14 是周一,所在的周数
image.png592827453.png
预览结果:
image.png639807738.png
返回的星期是:2;
image.png65741881.png
image.png408320311.png

造成星期不匹配的原因是:DatePart函数和SQL系统默认将星期7作为每周第一天,这个是西方的次序。而我们认为星期1才是每周第一天

在SqlServer中的查询结果和DatePart函数的结果一致。
image.png649656982.png
因此在需要计算正确星期的时候,需要在DatePart函数结果减1,或者在SqlServer中设置 set DATEFIRST 1
image.png563340148.png

而在mysql当中,需要使用week函数来获取日期所在的周。
查询的周数结果为37,和DatePart函数的查询结果差了一周。
image.png576996154.png

在Oralce当中,用to_char获取的结果也同样是37周。
image.png478624572.png

以Mysql为例,通常,一年的正常年份为365天,闰年为366天。一年又可以分为许多周,每周有7天。 所以一年,我们经常有365/7 = 52周,周范围是从152
要查看给定日期属于哪个周数,您可以使用WEEK函数,如下所示:
WEEK(date, mode);
WEEK函数接受两个参数:
  • date是要获取周数的日期。
  • mode是一个可选参数,用于确定周数计算的逻辑。它允许您指定本周是从星期一还是星期日开始,返回的周数应在0到52之间或0到53之间。

如果忽略mode参数,默认情况下WEEK函数将使用default_week_format系统变量的值。
要获取default_week_format变量的当前值,请使用SHOW VARIABLES语句如下:
1.mysql> SHOW VARIABLES LIKE 'default_week_format';
2.+---------------------+-------+
3.| Variable_name       | Value |
4.+---------------------+-------+
5.| default_week_format | 0     |
6.+---------------------+-------+
7.1 row in set
在我们的服务器中,default_week_format的默认值为0,下表格说明了mode参数如何影响WEEK函数:
模式
一周的第一天
范围
0
星期日
0-53
1
星期一
0-53
2
星期日
1-53
3
星期一
1-53
4
星期日
0-53
5
星期一
0-53
6
星期日
1-53
7
星期一
1-53












0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部