仅对某些列f1, f2, f3...
使用row_to_json
函数时,是否可以重命名默认名称?
我可以
row_to_json(customers)
回来
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
但是如果我只想要没有 的名字id_customer
,我必须使用
row_to_json(row(first_name, last_name))
然后我得到
{"f1":"bla","f2":"second_bla"}
我想用默认列名或我自己的列名来获得这个结果。我知道我可以创建自己的复合类型并使用
row_to_json(row(first_name, last_name))::my_custom_type
但是在不创建该类型的情况下是否可以在查询中正确执行此操作?
我有一些这样的数字表(状态是免费的或分配的)
id_set 号码状态 ----------------------- 1 000001 已分配 1 000002 免费 1 000003 已分配 1 000004 免费 1 000005 免费 1 000006 已分配 1 000007 已分配 1 000008 免费 1 000009 免费 1 000010 免费 1 000011 已分配 1 000012 已分配 1 000013 已分配 1 000014 免费 1 000015 已分配
我需要找到“n”个连续数字,因此对于 n = 3,查询将返回
1 000008 免费 1 000009 免费 1 000010 免费
它应该只返回每个 id_set 的第一个可能的组(实际上,它只会为每个查询的 id_set 执行)
我正在检查 WINDOW 函数,尝试了一些类似的查询COUNT(id_number) OVER (PARTITION BY id_set ROWS UNBOUNDED PRECEDING)
,但这就是我得到的:) 我想不出逻辑,如何在 …
我有一个存储过程,RETURNS SETOF ct_custom_type
我在里面做
RETURN QUERY EXECUTE 'some dynamic query'
Run Code Online (Sandbox Code Playgroud)
我想这样做:如果这个“动态查询”返回 >= 10 行,我想返回它们,但如果它只返回 < 10 行,我不想返回任何东西(空集ct_custom_type
)。
我试过:
RETURN QUERY EXECUTE 'some dynamic query'
GET DIAGNOSTICS variable = ROW_COUNT;
IF variable < 10 THEN
# I don't know what to do here or how to accomplish this
END IF;
Run Code Online (Sandbox Code Playgroud)
如果我RETURN QUERY SELECT 0, 0, ''::text;
在IF
块中执行(因为ct_custom_type
是 的复合类型(integer, integer, text)
,它只是将这个“空行”添加到先前的查询结果中,但在这种情况下我不想返回任何内容,我可以这样做RETURN;
,但它会返回先前的结果,我想丢弃它。
我有这样的:
EXECUTE 'dynamic query';
GET DIAGNOSTICS variable = ROW_COUNT; …
Run Code Online (Sandbox Code Playgroud)