【发布时间】:2021-09-12 08:09:12
【问题描述】:
我正在尝试计算工资数据。有没有办法在 sqlite3 中计算给定月份的天数
【问题讨论】:
我正在尝试计算工资数据。有没有办法在 sqlite3 中计算给定月份的天数
【问题讨论】:
有多种方法可以做到这一点,但您可以使用JULIANDAY 计算当月日期与当前日期之间的天数差,这应该会为您提供当月的天数。
例如计算包含日期2010-05-31的月份的天数;
SELECT JULIANDAY('2010-05-31', '+1 month') - JULIANDAY('2010-05-31') days_of_month
> 31
【讨论】:
使用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
【讨论】:
假设您将年份和月份作为数字,您可以使用strftime():
SELECT strftime('%d', '2021' || '-' || printf('%02d', ?) || '-01', '1 month', '-1 day') days
将'2021' 替换为您想要的年份,将? 替换为月份。
请参阅demo。
【讨论】:
'2021' || '-' || printf('%02d', ?) || '-01' 返回一个月的第一天。然后我用'1 month' 加上 1 个月来得到下个月的第一天,然后我减去 1 天来得到我想要的一个月的最后一天。从 strftime(%d) 的这一天开始,我只得到一天的部分。