【发布时间】:2017-12-03 06:07:23
【问题描述】:
假设我有一个独特的列VarChar(32)。
例如。 13bfa574e23848b68f1b7b5ff6d794e1.
我想在将列转换为int 时保留它的唯一性。我想我可以将所有字母转换为它们的 ascii 等价物,同时保留数字和字符位置。为此,我将使用翻译功能。
伪代码:select translate(uid, '[^0-9]', ascii('[^0-9]'))
我的问题是最初找到 VarChar 列中的所有字母。 我试过了
select uid, substring(uid from '[^0-9]') from test_table;
但它只返回它遇到的第一个字母。使用上面的例子,我会寻找bfaebfbbffde
感谢任何帮助!
【问题讨论】:
-
您不能将 VarChar(32) 值映射到 int 以保留唯一性。如果你用 ascii 等效替换所有字母,你将得到至少 32 位数字,而最大整数是 2,147,483,647。
-
Postgres 有特殊的uuid type.
-
您应该改用 UUID 类型。
-
我可以使用 bigint 吗?我需要它 int 的原因是因为我正在使用 pgRouting 扩展,并且某些功能需要一个 int 作为输入
标签: sql postgresql postgis