【问题标题】:Find the number of days in a given month in sqlite3在 sqlite3 中查找给定月份的天数
【发布时间】:2021-09-12 08:09:12
【问题描述】:

我正在尝试计算工资数据。有没有办法在 sqlite3 中计算给定月份的天数

【问题讨论】:

    标签: sql sqlite datetime


    【解决方案1】:

    有多种方法可以做到这一点,但您可以使用JULIANDAY 计算当月日期与当前日期之间的天数差,这应该会为您提供当月的天数。

    例如计算包含日期2010-05-31的月份的天数;

    SELECT JULIANDAY('2010-05-31', '+1 month') - JULIANDAY('2010-05-31') days_of_month
    > 31
    

    An SQLfiddle to test with.

    【讨论】:

      【解决方案2】:

      使用DATE 函数获取从某个日期到该月最后一天的信息,例如从“2021 年 6 月 5 日”到“2021 年 6 月 30 日”。然后使用STRFTIME 提取那一天(示例中为'30')。然后转换为 INTEGER 以将日期字符串转换为数字('30' -> 30)。

      SELECT 
        CAST(
          STRFTIME(
            '%d', 
            DATE(
              '2021-06-05',
              'start of month',
              '+1 month',
              '-1 day'
            )
          ) AS INTEGER
        );
      

      演示:https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=45d8620632c831d554b435b501f98912

      【讨论】:

        【解决方案3】:

        假设您将年份和月份作为数字,您可以使用strftime()

        SELECT strftime('%d', '2021' || '-' || printf('%02d', ?) || '-01', '1 month', '-1 day') days
        

        '2021' 替换为您想要的年份,将? 替换为月份。

        请参阅demo

        【讨论】:

        • 谢谢,最后我是用这段代码做的,能否请您解释一下这两种方式的区别,以便我更好地理解它
        • '1 month', '-1 day' -- 你的代码 'start of month','+1 month','-1 day' -- 我的代码 strftime 如何准确计算区别
        • @Rameez strftime() 用于格式化日期:'2021' || '-' || printf('%02d', ?) || '-01' 返回一个月的第一天。然后我用'1 month' 加上 1 个月来得到下个月的第一天,然后我减去 1 天来得到我想要的一个月的最后一天。从 strftime(%d) 的这一天开始,我只得到一天的部分。
        猜你喜欢
        • 2022-08-03
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        相关资源
        最近更新 更多