DatePart知多少

微信公众号原文

系统:Windows 7
软件:Excel 2010

引言

  • 关于某一个时间属于当年度哪一周这个问题,在之前的文章中也有介绍过。使用的是Format函数,WeekNum函数也可以实现部分功能
  • 今天讲讲另外一个能够实现该功能的函数:DatePart

思考:实验设计

  1. 实验1:设置几个时间值,设置不同参数,通过DatePart返回对应的周次,
  2. 实验2:一系列值,对比Format,WeekNum, DatePart

实验1:代码

Sub test_code()
    date_time = #1/2/2017#
    zhouci_1 = DatePart("ww", date_time, vbMonday, vbFirstJan1)
    zhouci_2 = DatePart("ww", date_time, vbMonday, vbFirstFourDays)
    Debug.Print ("zhouci_1=" & zhouci_1)
    Debug.Print ("zhouci_2=" & zhouci_2)
End Sub

代码截图
3.png

日历
2.png

实验1:代码解读

  1. DatePart(返回数据指定, 拟解读时间, 每周开始的第一天, 判别每年第一周方法)
  2. 常见每年第一周指定方法:包含1月1日的为第1周;第一个一周中有4天在新的一年中的那一周为第一周

DatePart支持返回的数据
4.png

每周开始的第一天
5.png

每年开始第一周
6.png

实验2:代码

Sub test_code2()
    Dim date_i As Date
    Set sht = ThisWorkbook.Worksheets("示例")


    For i = 3 To 8 Step 1
        date_i = sht.Cells(i, "A")
        'DatePart
        zhouci = DatePart("ww", date_i, vbMonday, vbFirstFourDays)
        sht.Cells(i, "B") = zhouci

        'Format
        zhouci = Format(date_i, "ww", vbMonday, vbFirstFourDays)
        sht.Cells(i, "C") = zhouci

        'WeekNum
        zhouci = Application.WeekNum(date_i, 2)
        sht.Cells(i, "D") = zhouci

    Next i
End Sub

代码截图
8.png

结果
7.png

Ps:关于Format,WeekNum解读,请查看以下两篇文章


更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

### SQL Server DATEPART 函数 使用说明 #### 1. 功能概述 `DATEPART` 是 SQL Server 提供的一个内置函数,用于从给定的日期表达式中提取特定的部分(如年份、月份、星期几等),并将其作为整数值返回[^1]。 #### 2. 基本语法 以下是 `DATEPART` 的基本语法: ```sql DATEPART(datepart, date) ``` - **datepart**: 表示要提取的具体部分,可以是 year (yy 或 yyyy),quarter (qq 或 q),month (mm 或 m),dayofyear (dy 或 y),day (dd 或 d),week (wk 或 ww),weekday (dw),hour (hh),minute (mi 或 n),second (ss 或 s),millisecond (ms) 等。 - **date**: 要从中提取信息的有效日期或时间值。 #### 3. 返回值类型 该函数返回一个整数类型的值。如果需要字符串形式的结果,则需配合其他转换函数使用[^3]。 #### 4. 示例代码 ##### 示例 1: 获取当前日期中的具体部分 假设我们想分别获取今天的年份、月份和星期几: ```sql SELECT DATEPART(year, GETDATE()) AS YearValue, DATEPART(month, GETDATE()) AS MonthValue, DATEPART(weekday, GETDATE()) AS WeekDay; ``` ##### 示例 2: 查询某列数据按天筛选 以下语句会查找表 `Specification` 中创建日期 (`CreateDate`) 和指定日期 `'2023-05-06'` 同一天的所有记录[^2]: ```sql SELECT SpecificationId, SpecificationRevision, SpecificationDescription, CreateDate FROM Specification WHERE DATEPART(day, CreateDate) = DATEPART(day, '2023-05-06'); ``` ##### 示例 3: 计算两个日期之间的差异 通过组合多个 `DATEPART` 可以实现更复杂的逻辑运算。比如计算某个订单跨越了几个月: ```sql DECLARE @StartDate DATETIME = '2023-08-15'; DECLARE @EndDate DATETIME = '2023-10-20'; SELECT ABS(DATEPART(month, @StartDate) - DATEPART(month, @EndDate)) AS MonthsDifference; ``` #### 5. 注意事项 - 如果输入参数不合法或者超出范围,可能会引发错误。 - 不同数据库管理系统之间可能存在功能上的细微差别。例如,在 MySQL 中类似的用途通常由 WEEK() 实现,而其定义方式可能略有不同[^4]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值