我有一个具有 type属性的punctures
表,我需要插入一条开放式记录,下限为当前时间 ( )。我试过extent
tsrange
extent
now()
INSERT INTO punctures(extent)
VALUES(tsrange(now(), ));
及其变体,但都会产生错误。
我如何定义tsrange
?
我有一个具有 type属性的punctures
表,我需要插入一条开放式记录,下限为当前时间 ( )。我试过extent
tsrange
extent
now()
INSERT INTO punctures(extent)
VALUES(tsrange(now(), ));
及其变体,但都会产生错误。
我如何定义tsrange
?
在 PG 12 数据库中,我有reservations
带有reserved_between
tsrange
列的表。
对于特定的analysis
,我需要知道最后一次预订的结束时间(稍后),并且下面的查询就是这样做的。
SELECT MAX(upper(reservations.reserved_between))
FROM dev.reservations
JOIN dev.analyses ON reservations.analysis_id = analyses.id
JOIN dev.analytical_tests ON analyses.analytical_test_id = analytical_tests.id
WHERE analytical_tests.specification_id = <MYID>
AND analytical_tests.tag = <MYTAG>
识别分析所需的参数在哪里<MYID>
以及在哪里。<MYTAG>
现在,如果没有reservations
,我需要返回 引用的as_early_as
( datetime
) 值。batch
analysis
我认为COALESCE
这可能是这份工作的一个不错的选择。因此,我将查询更新如下。
SELECT COALESCE(MAX(upper(reservations.reserved_between)), batches.as_early_as)
FROM dev.reservations
JOIN dev.analyses ON reservations.analysis_id = analyses.id
JOIN dev.analytical_tests ON analyses.analytical_test_id = analytical_tests.id
JOIN dev.batches ON analyses.batch_id = batches.id
WHERE analytical_tests.specification_id = <MYID>
AND analytical_tests.tag = <MYTAG>
但是,当我跑步时,我得到
错误:列“batches.as_early_as”必须出现在 GROUP BY 子句中或用于聚合函数第 1 行:...ALESCE(MAX(upper(reservations.reserved_between)), batches.as...
而且我不确定如何解决它,并且文档对我没有太大帮助。
我应该在查询中更改什么?
我有以下 PG (12)reservations
表
id uuid
reservable_id uuid
reserved_between tsrange
如何确保没有 2 个相同的预订reservable_id
相互重叠?
上的“简单”唯一索引reservable_id
,reserved_between
仅(如预期)仅在相等范围内有效。
在 SQLite DB 中,我有一个包含station
整数字段和at
日期字段的表。
如何结合这两个值在一个WHERE
子句中获得一个at
加station
月的日期?
即带有at = '2019-01-01'
and的记录station = 3
,我的 WHERE 子句应该看起来像WHERE before <= '2019-04-01'
我在网上查看了几个资源,包括https://www.sqlite.org/lang_datefunc.html但没有人提到使用字段值来计算日期。
我注意到在订购时,PostgreSQL(我目前正在使用 11,但我认为这同样适用于 10 和 9)区分大小写。它在小写字符串之前返回大写字符串。例如,假设我有一个friends
包含 3 条记录的表,first_name
列分别包含 adam
、Tony
、Paul
。
SELECT name
FROM friends
ORDER BY name
返回
[name]
Paul
Tony
adam
无论大小写如何,为了让它们按字母顺序排列,我可以使用该lower
函数。
SELECT name
FROM friends
ORDER BY lower(name)
返回
[name]
adam
Paul
Tony
现在我需要将friends
表与cities
表连接起来,以便只获取与城市相关联的朋友,同时保持朋友按字母顺序排列,并且不更改他们姓名的大小写。
以下查询有效
SELECT DISTINCT lower(friends.name)
FROM friends
INNER JOIN cities
ON friends.city_id = cities.id
ORDER BY lower(friends.name)
但是返回的名字都是小写的。但是,下面的查询
SELECT DISTINCT friends.name
FROM friends
INNER JOIN cities
ON friends.city_id = cities.id
ORDER BY lower(friends.name)
返回错误
ORDER BY 表达式必须出现在选择列表中。
在保留返回字符串的大小写的同时应用不区分大小写的顺序的最简单方法是什么?
如何将text
s 数组转换为 s 数组UUID
?
我需要join
在两个表之间做一个:users
和projects
.
该users
表有一个名为的数组字段project_ids
,其中包含项目 ID 作为文本。
该projects
表有一个名为 的 UUID 字段id
。
我最初的想法是查询如下:
SELECT * FROM projects
JOIN users ON
projects.id = ANY(users.project_ids)
但这不起作用,因为users.project_ids
are not UUID
s 所以我尝试了:
projects.id = ANY(users.project_ids::uuid[])
乃至:
projects.id = ANY(ARRAY[users.project_ids]::uuid[])
但没有一个工作:
ERROR: invalid input syntax for type uuid: ""
更新
@a_horse_with_no_name 绝对正确。最好的选择应该是使用一组 UUID。
现在的问题是如何将数组更改为text
数组uuid
?
该users
表当前为空(0 条记录)。
我努力了
ALTER TABLE "users" ALTER COLUMN "project_ids" SET DATA TYPE UUID USING "project_ids"::uuid[];
这会产生
错误:列“product_ids”的 USING 子句的结果无法自动转换为类型 uuid 提示:您可能需要添加显式转换。
ALTER TABLE "users" ALTER COLUMN "product_ids" 使用 "product_ids"::UUID 设置数据类型 UUID;
我也试过
ALTER TABLE "users" ALTER COLUMN "project_ids" SET DATA TYPE UUID[] USING "project_ids"::uuid[];
这会产生
错误:列“project_ids”的默认值不能自动转换为类型 uuid[]
该列默认设置为空数组。
我正在运行 PG 版本 10.4,project_ids
目前是text[] nullable
.
在 PG10 数据库中,我有一个名为的表ToDos
,我在其中定义了一个jsonb
名为tags
.
记录看起来像
+----+-----------------+-----------------------------------------+
| ID | Name | Tags |
+----------------------+-----------------------------------------+
| 1 | mow the lawn |[{"name": "Saturday", "scope": "system"},|
| | | {"name": "favorite", "scope": "user"}] |
+----------------------+-----------------------------------------+
| 2 | paint the fence |[{"name": "Monday", "scope": "system"}] |
+----------------------+-----------------------------------------+
现在我正在尝试编写一个返回类似内容的查询
+----+-----------------+------------+-----------+
| ID | Name | Tag Name | Tag Scope |
+----------------------+------------+-----------+
| 1 | mow the lawn | Saturday | system |
+----------------------+------------+-----------+
| 1 | mow the lawn | favorite | user |
+----------------------+------------+-----------+
| 2 | paint the fence | Monday | system |
+----------------------+------------+-----------+
但我很难分解这个jsonb
领域。有任何想法吗?