Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite中的strftime转换为postgres_Sqlite_Postgresql - Fatal编程技术网

sqlite中的strftime转换为postgres

sqlite中的strftime转换为postgres,sqlite,postgresql,Sqlite,Postgresql,我在sqlite中遇到了一个需要转换为postgres语法的函数。它是date(date,'-'| | strftime('%w',date)| | days') 有人能帮我把这个sqlite段转换成postgres吗?%w是一周中的某一天,从星期日开始的数字=0,与Postgresql的DOW相同:SELECT EXTRACT(DOW from TIMESTAMP'2001-02-16 20:38:40')来自 字符串操作应该很简单,但我已经有10年没有做过Postgres了 [经过进一步研究

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


有人能帮我把这个sqlite段转换成postgres吗?

%w是一周中的某一天,从星期日开始的数字=0,与Postgresql的DOW相同:
SELECT EXTRACT(DOW from TIMESTAMP'2001-02-16 20:38:40')来自

字符串操作应该很简单,但我已经有10年没有做过Postgres了

[经过进一步研究] 正如我所怀疑的,
|
操作符是字符串连接,来自

[安装sqlite和postgresql后] sqlite函数正在计算给定日期之前的星期日:

sqlite> select date('now', '-'||strftime('%w','now')||' days');
2011-08-21
给出了拼图的最后一块:

postgres=# select date 'now' - extract(dow from timestamp 'now')::int;
  ?column?  
------------
 2011-08-21
此SQLite:

date(date, '-' || strftime('%w', date) || ' days')
是指,AFAIK,从
日期中减去周数天数中的一天(即,0表示星期天,1表示星期一,…),然后将结果转换回
日期
;有关详细信息,请参阅

我认为PostgreSQL的等价物是:

d - extract(dow from d)::int
其中
d
是您的日期;从一个日期减去一个整数就会减去天数。如果
d
是一个时间戳,那么您可能需要添加一些强制转换。也有,但从周一开始计算天数,这样你就可以一天一天的休息了


下面是SQLite的快速分解,其中
date
变量替换为
d
,以避免与
date()
函数混淆:

date(d, '-' || strftime('%w', d) || ' days')
psql -c "SELECT to_char(time,'Mon DD HH24:MI:SS ') FROM mytable;" 
首先,
|
是标准的SQL字符串连接运算符。是来自的通用日期和时间格式化程序;
%w
格式说明符表示“星期几作为数字,星期日为零”;因此,
strftime
调用为星期天提供0,为星期一提供1,依此类推,为星期六提供6。如果
d
是一个星期二,那么
strftime
调用将产生2,整个结果如下:

date(d, '-2 days')
SQLite的修饰符有多种形式,但是
“-2天”
的意思正是您所想的:从
d
中减去两天。总体结果是
d
被截断为一周(其中周日被视为一周的第一天)

在PostgreSQL方面:

d - extract(dow from d)::int
我们可以从
extract
用于提取日期或时间的特定部分,
dow
表示“一周中的某一天为数字,周日为零日”。听起来熟悉吗?然后,
::int
将道琼斯指数转换为整数,这是必需的,因为道琼斯指数实际上是一个双精度值,并且在PostgreSQL中没有定义用于从日期中减去双精度值的运算符;强制转换也可以标准格式编写为
cast(x为int)
。当你在PostgreSQL中从一个日期中减去一个整数时,你减去了那么多天;你可以通过说
-interval'3days'
这样的话来更明确一些,但在这种情况下,这只会增加更多的噪音,所以我选择了简单。如果是星期二,那么我们的PostgreSQL版本如下所示:

d - 2
这与:

d - interval '2 days'
减法之后,我们将在周日回来。PostgreSQL中也有,但会截短到星期一而不是星期天。

给定类似“Mar 12 18:07:22”的格式,

使用
到\u char
功能:

date(d, '-' || strftime('%w', d) || ' days')
psql -c "SELECT to_char(time,'Mon DD HH24:MI:SS ') FROM mytable;" 
使用
strftime
功能(借助
awk
):


在前面的示例中

  • 打印格式为3月12日18:07:22
  • sqlite列time是一种文本类型,为ISO8601字符串
  • postgres列时间为时间戳类型

您能推荐一个替代方案吗?您能让我先了解sqlite语句的逻辑,然后再了解postgres的逻辑吗?我很难跟上参考资料。@cfarm54:我为您添加了一些演练。