DECLARE @StartTime datetime,@EndTime datetime
SELECT @StartTime=GETDATE()
select distinct born_on.name
from born_on,died_on
where (FLOOR(('2012-01-30'-born_on.DOB)/365.25) <= (
select max(FLOOR((died_on.DOD - born_on.DOB)/365.25))
from died_on, born_on
where (died_on.name=born_on.name))
)
and (born_on.name <> All(select name from died_on))
SELECT @EndTime=GETDATE()
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs]
Run Code Online (Sandbox Code Playgroud)
我无法获得查询时间.相反,我收到以下错误:
sql:/home/an/Desktop/dbms/query.sql:9: ERROR: syntax error at or near "@"
LINE 1: DECLARE @StartTime datetime,@EndTime datetime
Run Code Online (Sandbox Code Playgroud) 我有下表,它为每个用户提供了多个电子邮件地址.

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"3个电子邮件地址.
user.name | user.id | email1 | email2 | email3**
Mary | 123 | mary@gmail.com | mary@yahoo.co.uk | mary@test.com
Joe | 345 | joe@gmail.com | [NULL] | [NULL]
Run Code Online (Sandbox Code Playgroud) 假设我有一个这样的表:
subject | flag
----------------+------
this is a test | 2
Run Code Online (Sandbox Code Playgroud)
subject属于类型text,flag属于类型int.我想在Postgres中将此表转换为类似的内容:
token | flag
----------------+------
this | 2
is | 2
a | 2
test | 2
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?
我需要一个Postgres函数来返回一个带有自定义内容的虚拟表(就像在Oracle中一样).该表将有3列和未知行数.
我在互联网上找不到正确的语法.
想象一下:
CREATE OR REPLACE FUNCTION "public"."storeopeninghours_tostring" (numeric)
RETURNS setof record AS
DECLARE
open_id ALIAS FOR $1;
returnrecords setof record;
BEGIN
insert into returnrecords('1', '2', '3');
insert into returnrecords('3', '4', '5');
insert into returnrecords('3', '4', '5');
RETURN returnrecords;
END;
Run Code Online (Sandbox Code Playgroud)
这怎么写的正确?
我有一张桌子id,year和count.
我想得到MAX(count)每个id并保持year它发生的时间,所以我做这个查询:
SELECT id, year, MAX(count)
FROM table
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
不幸的是,它给了我一个错误:
错误:列"table.year"必须出现在GROUP BY子句中或用于聚合函数
所以我尝试:
SELECT id, year, MAX(count)
FROM table
GROUP BY id, year;
Run Code Online (Sandbox Code Playgroud)
但是,它没有做MAX(count),它只是显示表格.我想是因为分组的时候year和id,它得到最大的id是特定年份的.
那么,我该如何编写该查询呢?我想要得到id的MAX(count),并在今年这种情况发生的时候.
我是数据库开发的新手,所以我对以下示例有些怀疑:
函数f1() - 语言sql
create or replace function f1(istr varchar) returns text as $$
select 'hello! '::varchar || istr;
$$ language sql;
Run Code Online (Sandbox Code Playgroud)
函数f2() - 语言plpgsql
create or replace function f2(istr varchar)
returns text as $$
begin select 'hello! '::varchar || istr; end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
这两个函数都可以像select f1('world')或一样调用select f2('world').
如果我打电话select f1('world')的输出将是:
`hello! world`
Run Code Online (Sandbox Code Playgroud)并输出为select f2('world'):
错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改用PERFORM.语境:在SQL语句中PL/pgSQL函数f11(字符变化)第2行 ******错误******
我想知道的差异,在哪些情况下我应该使用language sql或language plpgsql …
我有这个简单的声明:
SELECT idnumber FROM dbo.database WHERE number = '9823474'
Run Code Online (Sandbox Code Playgroud)
如果表中的任何位置都不存在该数字,则会失败.我想在这个声明中添加一些内容:
如果没有记录,则返回NULL,不要行.
有什么建议?
使用PostgreSQL,我有很多查询,如下所示:
SELECT <col 1>, <col 2>
, (SELECT sum(<col x>)
FROM <otherTable>
WHERE <other table foreignkeyCol>=<this table keycol>) AS <col 3>
FROM <tbl>
Run Code Online (Sandbox Code Playgroud)
鉴于子选择在每种情况下都是相同的,有没有办法将该子选择存储为表中的伪列?基本上,我希望能够从表A中选择一列,它是表B中与记录相关的特定列的总和.这可能吗?
我有一个要求,我必须得到与给定表/视图关联的触发器列表.
任何人都可以帮我找到PostgreSQL中表的触发器吗?
使用Postgres 9.4,我正在寻找一种方法来合并查询中的两个(或更多)json或jsonb列.以下表为例:
id | json1 | json2
----------------------------------------
1 | {'a':'b'} | {'c':'d'}
2 | {'a1':'b2'} | {'f':{'g' : 'h'}}
Run Code Online (Sandbox Code Playgroud)
是否可以让查询返回以下内容:
id | json
----------------------------------------
1 | {'a':'b', 'c':'d'}
2 | {'a1':'b2', 'f':{'g' : 'h'}}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法定义此处所述的功能.这可能是"传统"查询吗?