从Postgres中选择截断的字符串

问题描述 投票:10回答:1

我在Postgres中有一些大的varchar值,我想选择这些值并将其移动到其他位置。他们要使用的位置使用VARCHAR(4095),所以我最多只需要4095个字节(我认为是字节),并且其中一些varchars很大,因此性能优化将是选择它们的截断版本。

我该怎么做?类似于:

SELECT TRUNCATED(my_val, 4095) ...

尽管我不认为这是字符长度,它必须是字节长度吗?

sql postgresql types casting varchar
1个回答
17
投票

n中的varchar(n)字符的数量,而不是字节。 The manual:

SQL定义了两种主要字符类型:character varying(n)character(n),其中n是一个正整数。这两种类型都可以存储长度不超过[[n 字符(非字节)的字符串。

加粗强调我的。

最简单的“截断”字符串的方法是使用left()

left()

或者只是SELECT left(my_val, 4095)

cast

SELECT my_val::varchar(4095)

[如果明确将值转换为The manual once more:character varying(n),那么超出长度的值将被截断为

character(n)字符而不会引发错误。 (这也是SQL标准所必需的。)

© www.soinside.com 2019 - 2024. All rights reserved.