我在Postgres中有一些大的varchar
值,我想选择这些值并将其移动到其他位置。他们要使用的位置使用VARCHAR(4095)
,所以我最多只需要4095个字节(我认为是字节),并且其中一些varchars很大,因此性能优化将是选择它们的截断版本。
我该怎么做?类似于:
SELECT TRUNCATED(my_val, 4095) ...
尽管我不认为这是字符长度,它必须是字节长度吗?
n
中的varchar(n)
是字符的数量,而不是字节。 The manual:
加粗强调我的。SQL定义了两种主要字符类型:
character varying(n)
和character(n)
,其中n
是一个正整数。这两种类型都可以存储长度不超过[[n
字符(非字节)的字符串。
最简单的“截断”字符串的方法是使用left()
:
left()
或者只是SELECT left(my_val, 4095)
:
SELECT my_val::varchar(4095)
[如果明确将值转换为The manual once more:或character varying(n)
,那么超出长度的值将被截断为
character(n)
字符而不会引发错误。 (这也是SQL标准所必需的。)