首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将时间戳从bash传递到psql

如何将时间戳从bash传递到psql
EN

Stack Overflow用户
提问于 2018-03-23 09:52:31
回答 1查看 1K关注 0票数 0

我在将时间戳参数传递给psql时遇到了问题。在$since变量中,可以按照SQL标准格式化任何字符串,并将此值传递给sql,如下所示:

首先,我检查$since是否采用正确的格式(如果它失败了,它不会继续):

1) psql --command "SELECT ($since)::TIMESTAMPTZ;"

其次,我在函数中使用了值(它以时间戳作为输入参数):

2) cmd="SELECT myfunc($since);" psql --command "$cmd" $DBNAME

Works:if since="NOW() - INTERVAL '5 months'"

不工作:如果since="2017-10-23 10:42:48" (在第1行失败: SELECT (2017-10-23 10:42:48)::TIMESTAMPTZ;since="2017-10-23 10:42:48";错误)

我试图用‘、“、\字符来转义$since字符串,但是在使用bash和sql进行了多次组合之后,我放弃了。在这种情况下,正确的转义方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-03-23 23:18:22

如果需要将字符串强制转换为TIMESTAMPTZ,则需要在创建变量时将$since值括在“”中。

代码语言:javascript
运行
复制
since="'2017-10-23 10:42:48'"

或者当它传递给psql时:

代码语言:javascript
运行
复制
since="2017-10-23 10:42:48"
psql --command "SELECT '$since'::TIMESTAMPTZ ;"

如果您需要传递(一个字符串或像NOW() - INTERVAL '1 day'这样的表达式),最好在将值赋值给变量时决定引用,如下所示:

代码语言:javascript
运行
复制
$ since="'2017-10-23 10:42:48'"
$ psql postgres --command "SELECT $since::TIMESTAMPTZ ;"
      timestamptz       
------------------------
 2017-10-23 10:42:48+02
(1 row)
$ since="(NOW() - INTERVAL '1 day')"
$ psql postgres --command "SELECT $since::TIMESTAMPTZ ;"
          timestamptz          
-------------------------------
 2018-03-24 08:49:24.577356+01
(1 row)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49446783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档