SQLite:从日期中获取周数

4

如何从日期中获取周数,在SQL中有一个函数:Datepart(GetDate()),它返回周数。在SQLite中该怎么做呢?


2
这个问题与Java和Android有什么关系? - Bert Verhees
这非常广泛。你的搜索结果是什么?它在哪些方面不足或失败了? - Ole V.V.
2
SQLite 理解的 SQL 中提到了一年中的周数。看看你能否使用它。当然,也可以在 Java 中获取周数。 - Ole V.V.
1
定义“周数”。第1周包含1月1日吗?包含特定星期几的第一次出现吗?由新年开始的第一个完整的只包含天数的一周?标准的ISO 8601周?在发布前请搜索Stack Overflow。这个问题已经被问过和回答了很多次。 - Basil Bourque
不,与您的第一句话相反,我不认为“DatePart”是标准SQL。它是Microsoft SQL Server中的一个函数。Postgres紧随标准,有一个date_part函数。 - Basil Bourque
显示剩余2条评论
2个回答

16

你可以使用strftime函数,其中格式字符串(第一个参数)为%W,参照SQL As Understood By SQLite - Date And Time Functions

示例

DROP TABLE IF EXISTS getweek;
CREATE TABLE IF NOT EXISTS getweek (mydate TEXT);
INSERT INTO getweek VALUES ('2018-01-01'),('2018-02-01'),('2018-03-01');
SELECT *, strftime('%W',mydate) AS weekofyear FROM getweek;
这将导致:-

enter image description here

注意日期必须是已认可的日期/时间格式之一(例如,2018/03/01将导致null,因为日期不在已认可的格式中)。请参见上面链接中的时间字符串部分以了解已识别的格式。


1
很遗憾,该文档未说明该函数使用哪种周定义。它可能是标准ISO 8601周。您是否有任何权威的文档可以在您的答案中提供链接或引用? - Basil Bourque
它不符合ISO标准。sqlite文档在一个表中提到%W对应于“年的周数:00-53”。但是ISO的周数是从1到53。Sqlite似乎遵循Ruby的约定。请参考https://stackoverflow.com/a/48084840/1150961了解详细信息。 - undefined

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接