小编Joh*_*ohn的帖子

在两列上检查相同的长条件

我有两列XY一个where语句如下:

WHERE (x=0 or x=1 or x=4 or x=6 or x=7 or x=12 or x=75) and 
      (y=0 or y=1 or y=4 or y=6 or y=7 or y=12 or y=75) 
Run Code Online (Sandbox Code Playgroud)

因为它在同一个表的两列上都是相同的条件,有没有办法缩短它?

有点像x and y are (0 or 1 or 4....)- 它不是PostgreSQL语法,但它澄清了这个问题.

注意:数字代表状态,这种情况背后没有数学逻辑.

sql postgresql

11
推荐指数
2
解决办法
397
查看次数

pgAdmin:如何打开一个评论块?

在pgAdmin中有两种标记注释的方法 - PostgreSQL:

  1. -- bla bla

和:

  1. /* bla bla bla bla*/

对于第一个我使用ctrl + k作为短热键.第二个有热键吗?我知道ctrl + k可以应用于muliple线,如果我标记它们但它会添加 - 对于所有不是我正在寻找的线.

pgadmin

6
推荐指数
3
解决办法
6501
查看次数

如何使用参数从函数创建VIEW?

我在PostgreSQL中有这个功能:

CREATE OR REPLACE FUNCTION func1(a integer, b timestamp, c integer[])
  RETURNS SETOF typ_new AS 
$BODY$
declare
begin
    CREATE OR REPLACE VIEW newView as (select * from func2($1,$2,$3));
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

func2也会返回,SETOF typ_new因此它们兼容.

运行时我收到一个错误:ERROR: there is no parameter $1 如果我更改$1为参数名称,a则错误更改为 ERROR: column "a" does not exist

我也尝试过动态SQL:

    sqlstr ='CREATE OR REPLACE VIEW newView (columns... ) as
              (select * from func2('||$1||','||$2||','||$3||'))';
    execute sqlstr;
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为$3integer[]||不能使用数组.

我该如何解决这个问题?

sql postgresql dynamic-sql

5
推荐指数
1
解决办法
5277
查看次数

如何在 PostgreSQL 中生成月份列表?

我有一个A包含startdate列的表,TIMESTAMP WITHOUT TIME ZONE我需要编写一个查询/函数来生成从MIN列的值到MAX列的值的月份列表。

例如:

startdate
2014-12-08
2015-06-16
2015-02-17
Run Code Online (Sandbox Code Playgroud)

将生成一个列表:(Dec-14,Jan-15,Feb-15,Mar-15,Apr-15,May-15,Jun-15)

我怎么做?我从未使用 PostgreSQL 生成不存在的数据...它总是在数据库中查找正确的数据...有什么想法如何做到这一点吗?在查询中可行吗?

sql postgresql

5
推荐指数
2
解决办法
6692
查看次数

PostgreSQL:如何将两列相乘并在同一查询中显示结果?

我有一个查询,它的select语句是这样的:

select Greatest(p.price,0) as newprice, sum(q.qty) as qty
from ....
Run Code Online (Sandbox Code Playgroud)

它给了我:

     newprice qty
      10      1
      0       1
      100     2
      1       2
Run Code Online (Sandbox Code Playgroud)

我想将newprice与qty相乘得到:

    newprice  qty   result
      10      1      10
      0       1      0
      100     2     200
      1       2      2
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做select Greatest(p.price,0) as newprice, sum(q.qty) as qty, newprice * qty时说

ERROR: column "newprice" does not exist
Run Code Online (Sandbox Code Playgroud)

我真的不需要这个额外的专栏.

我真正想要的是:SUM(Greatest(p.price,0) * SUM(q.qty)) 它应该给出价值,212但它说ERROR: aggregate function calls cannot be nested

基本上我只需要将两列相乘并对结果求和.我知道我可以使用类似于此处所示的CTE ,但我想知道是否有更简单的方法来减少代码.

sql postgresql

4
推荐指数
1
解决办法
8960
查看次数

在PostgreSQL中,如何查找哪个表使用特定的序列?

我有一个名为seque_post的序列.

我需要找出它正在使用的表格.有没有办法编写一个会给出表名的查询?

我写了这个查询来查找序列:

select *
from pg_class
where relname like 'seque_post'
Run Code Online (Sandbox Code Playgroud)

那里有一个reltoastrelid根据手册给出的文件:

与此表关联的TOAST表的OID,如果没有,则为0.TOAST表在辅助表中存储"脱节"的大型属性.

但我不知道如何从这里继续..建议?

postgresql

4
推荐指数
1
解决办法
3030
查看次数

在 postgresql 中翻转布尔值

我的表中有一个Boolean类型字段(PostgreSQL 9.0)

有没有办法编写一个查询,在不知道当前存在什么的情况下将该字段更新为相反的值?

如果是,True那么它将更新为False.

如果是,False那么它将更新为True.

基本上我问是否有一种机制允许将Boolean类型与1 bit. 例如,在 C 中,如果x可以是,{1,0}您可以简单地编写x=!x,如果是,0则将是1,如果是1,则将是0。无需IF声明等...

sql postgresql

4
推荐指数
1
解决办法
1841
查看次数

postgresql:对于给定的表名,什么是模式名?

我有一个表名 student 并且我的数据库中有 35 个模式。我怎样才能得到表学生存在的模式?(在不同的模式中可能有多个)。

我已经尝试过了,pg_class但我不知道如何从那里获取架构名称。

sql postgresql select data-dictionary

2
推荐指数
1
解决办法
5010
查看次数

在PostgreSQL中格式化日期

我有一个字段,其格式是日期与时间:YYYY-MM-DD HH-MM-SS例如:2000-08-12 00:00:00我想获得日期部分并更改其格式DD/MMM/YYYY,例如前一个示例的预期结果将是:12/Aug/2000

字段定义是: Ddate timestamp without time zone DEFAULT now()

我也阅读了日期/时间函数和操作符以及其他来源的整个页面,但我找不到任何有用的信息.

sql postgresql select date-formatting

2
推荐指数
1
解决办法
6835
查看次数

如果在python中赋值,则为一行

关注此主题一行if-condition-assignment

有没有办法缩短那里的建议陈述:

num1 = (20 if intvalue else 10)
Run Code Online (Sandbox Code Playgroud)

如果指定值在条件中是相同的值?

这就是它现在的样子:

num1 = (intvalue if intvalue else 10)
Run Code Online (Sandbox Code Playgroud)

intvalue出现两次.有没有办法只使用intvalue一次并获得相同的声明?更优雅的东西?

python conditional-expressions

2
推荐指数
1
解决办法
1076
查看次数

在PostgreSQL中,有关citext性能的奇怪问题?

PostgreSQL手册中,它说它citext只是一个TEXT通过调用实现数据类型的模块LOWER():

citext模块提供不区分大小写的字符串类型citext.从本质上讲,它在比较值时内部调用较低.否则,它的行为几乎与文本完全相同.

另一方面,在文件结束时,它说:

citext不如文本有效,因为运算符函数和B树比较函数必须复制数据并将其转换为小写以进行比较.但是,使用lower来获得不区分大小写的匹配稍微有效一点.

所以我很困惑,如果它使用它LOWER()怎么能"比使用更低的效率略高"?

sql postgresql

1
推荐指数
1
解决办法
1206
查看次数