sqlite 中的 strftime 转换为 postgres

2024-04-24

我在 sqlite 中遇到一个函数,需要将其转换为 postgres 语法。它是date(date, '-'||strftime('%w',date)||' days').

谁能帮我将此 sqlite 段转换为 postgres 吗?


这个 SQLite:

date(date, '-' || strftime('%w', date) || ' days')

AFAIK 是减去一周中的天数(即 0 表示星期日,1 表示星期一,...)date然后将结果转换回date;看到日期函数参考 http://www.sqlite.org/lang_datefunc.html了解详情。

我认为 PostgreSQL 的等价物是:

d - extract(dow from d)::int

where d是你的约会对象;从日期中减去一个整数就是减去该天数。如果d是一个时间戳,那么您可能需要添加一些转换。有date_trunc('week', 'd') http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC也一样,但是从星期一开始计算天数,所以你会因此而减少一天。


这是 SQLite 的快速细分date变量替换为d以避免与date()功能:

date(d, '-' || strftime('%w', d) || ' days')

首先,||是标准的 SQL 字符串连接运算符。这strftime功能 http://www.sqlite.org/lang_datefunc.html是一个通用日期和时间格式化程序,来自POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html; the %w格式说明符表示“一周中的某一天为数字,星期日为第 0 天”;所以strftimecall 为您提供周日为 0,周一为 1,依此类推,周六为 6。如果d是星期二,那么strftime调用将产生 2 ,整个事情最终如下:

date(d, '-2 days')

SQLite 的修饰符date功能 http://www.sqlite.org/lang_datefunc.html有多种形式但'-2 days'意思正是你所想的:减去两天d。总体结果是你得到d截断为周(其中星期日被视为一周的第一天)。

在 PostgreSQL 方面:

d - extract(dow from d)::int

我们可以从extract http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT; extract用于提取日期或时间的特定部分dow表示“一周中的某一天为数字,星期日为第 0 天”。听起来有点熟?然后::int将 DOW 数字转换为整数,这是必需的,因为 DOW 实际上以双精度值的形式出现,并且 PostgreSQL 中没有定义用于从日期中减去双精度值的运算符;演员阵容也可以写成标准形式cast(x as int)。当你从 PostgreSQL 中的日期减去一个整数时,你就减去了那么多天;你可以更明确地说,比如- interval '3 days'但在这种情况下,这只会增加更多噪音,所以我选择了简单性。如果是星期二,那么我们的 PostgreSQL 版本如下所示:

d - 2

这与以下相同:

d - interval '2 days'

减法之后我们会在周日回来。还有date_trunc http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC在 PostgreSQL 中,但这会截断为星期一而不是星期日。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite 中的 strftime 转换为 postgres 的相关文章

随机推荐