我想从日期返回ISO标准周数(即1-52 / 53周)。 我尝试过使用内置函数strftime,但没有成功。
任何人都可以建议一种方法,而无需编写自定义C或其他功能。
答案 0 :(得分:2)
我知道这是一个老问题,但最近我一直在为同样的问题找到一个有效的解决方案,这就是我想出的:
SELECT
my_date,
(strftime('%j', date(my_date, '-3 days', 'weekday 4')) - 1) / 7 + 1 as iso_week
FROM my_table;
基本思想是通过简单地执行查询日期的星期四(y_date)的星期几的整数除以7来计算ISO周数,得到0到52之间的结果,然后加1它。并且在除法之前减1只是为了除法的对齐:例如,第1周的星期四可以有1到7之间的一年中的一天,并且我们希望除法的结果为0在所有情况下,我们需要从一年中减去1,然后除以7。
答案 1 :(得分:0)
你有什么具体的尝试?
这适用于我(使用Python REPL内置的SQLite):
import sqlite3
c = sqlite3.connect(':memory:')
c.execute('''create table t (c);''')
c.execute('''insert into t values ('2012-01-01');''')
c.execute('''select c, strftime('%W',c) from t;''').fetchone()
# -> (u'2012-01-01', u'00')
答案 2 :(得分:0)
好的,所以我设法回答了我自己的问题。对于任何可能需要类似解决方案的人来说,这就是我想出的。请注意,我没有IT背景,我的SQL是自学成才。
翻译成SQLite ....
SELECT
date,
CASE CAST (strftime('%w', wknumjanfourth) AS INTEGER)
WHEN 0 THEN ((JULIANDAY(datesThur) - JULIANDAY(strftime("%s", wknumjanfourth) - 259200, 'unixepoch')) / 7) + 1
ELSE ((JULIANDAY(datesThur) - JULIANDAY(DATE(strftime("%s", wknumjanfourth) - (86400 * (strftime('%w', wknumjanfourth) - 1)), 'unixepoch'), '+3 day')) / 7) + 1
END AS weeknum
FROM
(
SELECT
date,
datesThur,
DATE(datesThur,'start of year','+3 day') AS wknumjanfourth
FROM
(SELECT
date,
CASE CAST (strftime('%w', date) AS INTEGER)
WHEN 0 THEN DATE(strftime("%s", date) - 259200, 'unixepoch')
ELSE DATE(DATE(strftime("%s", date) - (86400 * (strftime('%w', date) - 1)), 'unixepoch'), '+3 day')
END AS datesThur
FROM TEST
))
如果有人可以改进这个SQL,我会很感激反馈。