【问题标题】:Select truncated string from Postgres从 Postgres 中选择截断的字符串
【发布时间】:2016-01-06 16:42:13
【问题描述】:
我在 Postgres 中有一些较大的 varchar 值,我想选择并移动到其他地方。他们要去的地方使用VARCHAR(4095),所以我最多只需要 4095 个字节(我认为这是字节),其中一些 varchar 非常大,所以性能优化是选择它们的截断版本。
我该怎么做?
比如:
SELECT TRUNCATED(my_val, 4095) ...
我不认为这是一个字符长度,它需要是一个字节长度?
【问题讨论】:
标签:
sql
postgresql
types
casting
varchar
【解决方案1】:
varchar(n) 中的 n 是 字符数,而不是字节数。 The manual:
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 标准所要求的。)