2015-10-08 23 views
4

我在Postgres中有一些大的varchar值,我想选择并移动到别的地方。他们要使用的地方VARCHAR(4095)所以我只需要最多4095个字节(我认为这是个字节),其中一些变量非常大,所以性能优化将选择它们的截断版本。从Postgres中选择截断的字符串

我该怎么做?
喜欢的东西:

SELECT TRUNCATED(my_val, 4095) ... 

我不认为这是一个字符长度,虽然,它需要一个字节长度?

回答

8

varchar(n)n字符(而不是字节)的数目。 The documentation:

SQL定义了两种基本的字符类型:character varying(n)character(n),其中n是一个正整数。这两种类型都可以 存储字符串高达n字符(非字节)的长度。

大胆重视我的。

为 “截断” 的字符串将与left()最简单的方法:

SELECT left(my_val, 4095) 

或者你可以只cast

SELECT my_val::varchar(4095) 

The manual once more:

如果明确地把一个值为character varying(n)character(n),则超长值将被截断为n 字符而不会引发错误。 (这也是SQL标准所要求的。)