我有两个字符串列a
和b
一个表foo
.
select a, b from foo
返回值a
和b
.但是,串联a
和b
不起作用.我试过了 :
select a || b from foo
Run Code Online (Sandbox Code Playgroud)
和
select a||', '||b from foo
Run Code Online (Sandbox Code Playgroud)
从评论更新:两列都是类型character(2)
.
PostgreSQL中IN
和ANY
运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗
我正在PL/pgSQL中开发一些存储过程,其中一些给我一些问题.我正在开发的sprocs通过参数接收一个数组,我在FOR LOOP中使用它来获取它的所有元素.要定义FOR LOOP的上限,我使用array_length函数.
FOR i IN 1..array_length(array,1) LOOP
--array[i] something in here
END LOOP;
Run Code Online (Sandbox Code Playgroud)
当我向sprocs提供一个空数组时会出现问题.sproc只是返回一个错误,而不是不进入循环,说明FOR LOOP的上限是NULL.不应该是0吗?
我对FOR LOOP有什么不妥吗?
有没有其他方法在LOOP中使用相同的边界而不使用空数组时返回NULL?
注意:我知道我总是可以在LOOP之前使用条件,如下所示:
IF array_length(array,1) IS NOT NULL THEN
Run Code Online (Sandbox Code Playgroud)
但问题是:这个sproc应该在最短的时间内处理数千个电话.因此,我并不期待为处理增加不必要的开销.我只是在寻找是否有办法在循环中"循环"一个空数组.
根据Postgres文档,它们支持3种数据类型的字符数据:
Run Code Online (Sandbox Code Playgroud)character varying(n), varchar(n) variable-length with limit character(n), char(n) fixed-length, blank padded text variable unlimited length
在我的应用程序中,我遇到了一些令人不愉快的情况,其中插入/更新查询失败,因为要插入的所需文本超出varchar(n)
或char(n)
限制.
对于这种情况,更改此类列的数据类型就text
足够了.
我的问题是:
如果我们概括并更改每个字符存储列的数据类型text
,那么性能/内存方面是否有任何缺点?
如果数据类型的列text
每次都存储10个或更少的字符,我应该选择text
还是varchar(10)
?
如果我追求的text
是什么?
我必须对凌乱的数据库做一些查询.有些列填充了null
空字符串或空字符串.我可以这样查询:
select * from a where b is not null and b <> '';
Run Code Online (Sandbox Code Playgroud)
但这种情况有没有捷径?(匹配每个"非空"值)类似于:
select * from a where b is filled;
Run Code Online (Sandbox Code Playgroud)