【发布时间】:2017-06-10 11:31:27
【问题描述】:
我有例如一个表“员工”与
last_name :: character varying
handed_texts :: text[]
其中 text 是自己的数据类型,带有 "("Date", title/not_exist)"。
x := ({}, 1,2,...) 时可能有 x 个条目
例子:
jones , {"(2017-01-01, stars_in_univ)", "(2017-01-01, not_exist)", "(2017-01-02, unemployed ants)"}
tomes , {"(2017-01-01, not_exist)", "(2017-01-08, shared_minds)"}
我现在的问题:我想计算每个名字的现有文本。 我试过了,例如类似的东西:
SELECT last_name, handed_texts,
CASE
WHEN handed_texts IS NULL THEN 0
ELSE
FOREACH i IN ARRAY handed_texts
DECLARE c integer;
SET c = 0;
LOOP
IF i NOT LIKE '%not_exist%' THEN c+1 ELSE c END IF
return c
END LOOP
END AS counted_texts
FROM employee
我知道声明是完全错误的,但我找不到任何方法以我的系统接受的方式声明变量,所以我只是在我认为应该声明的地方写了它。 我试图计算的另一种方法是创建一个新数组,我只需将正确/想要的记录放入并使用 array_length,但这似乎比上面的例子更具灾难性。
【问题讨论】:
-
定义自己的数据类型与现有的内置数据类型同名不是一个好主意
-
谢谢,没错。但是我发现一个简短的例子没有这么快。也许只是将其称为具有相同定义的协议...。
标签: sql arrays postgresql loops conditional-statements