0

我有查询,结果为

 app_no
--------
(0 rows)

我只需要获取行部分,而这也只是数字。我将结果保存到一个变量中,但我无法解析它。

napp=`psql -U postgres appdb -c "select appno from app.apps where properties&2048=1024

cap=$(echo "$napp"|sed -n 's/[0-9][0-9] rows/\1/p')
echo "$cap"

我只需要行数,这也只是数字。

4

2 回答 2

1

如果您需要appno匹配的条目数,那么您可能应该使用:

SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 1024

但答案总是 0,因为条件总是给出 0 或假。您需要两次相同的位,要么都是 1024,要么都是 2048。

SELECT COUNT(*) FROM app.apps WHERE properties & 1024 = 1024
SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 2048

在编写 shell 脚本时,坚持使用标题和摘要的 SQL 接口是一件麻烦事。但是,psql手册建议-q并且-t可能会有所帮助(-A也许也有帮助):

  • -A或者--no-align

    切换到非对齐输出模式。(默认输出模式以其他方式对齐。)

  • -q或者--quiet

    指定 psql 应该安静地完成它的工作。默认情况下,它会打印欢迎消息和各种信息输出。如果使用此选项,则不会发生这种情况。这对 -c 选项很有用。在 psql 中,您还可以设置 QUIET 变量以达到相同的效果。

  • -t或者--tuples-only

    关闭列名和结果行计数页脚等的打印。这相当于\t命令。

于 2013-03-14T19:37:31.510 回答
0

如果要按原样剪切字符串:

napp=$(psql -U postgres appdb -c "
    select appno frpm app.apps
    where properties&2048=1024;"
)
cap=$(echo "$napp" | sed -nr 's/.*\(([0-9]+) rows.*/\1/p')
echo "$cap"

但更好的解决方案是Jonathan Leffler 的解决方案

于 2013-03-14T19:28:25.750 回答