Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否有可能获得varchar';什么是唯一的数值?_Sql_Postgresql - Fatal编程技术网

Sql 是否有可能获得varchar';什么是唯一的数值?

Sql 是否有可能获得varchar';什么是唯一的数值?,sql,postgresql,Sql,Postgresql,样本: 预期产出: select 'test1' union all select 'test2' 我所尝试的: 我试着用md5来做这件事,但它不是数字类型,而且可能是重复的 value 5XXXXXXX94 5XXXXXXXX6 创建一个表,用于保存字符串和代码之间的关系。创建函数,该函数接受字符串,在表中搜索该字符串,如果未找到,则生成并插入唯一的随机(或下一步使用某些生成器)代码,然后返回代码(已找到或已生成) 或者创建一个函数,生成一些手工制作的“散列”。例如,它可以获取字符串中

样本:

预期产出:

select 'test1' 
union all
select 'test2'
我所尝试的:

我试着用md5来做这件事,但它不是数字类型,而且可能是重复的

value
5XXXXXXX94
5XXXXXXXX6


创建一个表,用于保存字符串和代码之间的关系。创建函数,该函数接受字符串,在表中搜索该字符串,如果未找到,则生成并插入唯一的随机(或下一步使用某些生成器)代码,然后返回代码(已找到或已生成)


或者创建一个函数,生成一些手工制作的“散列”。例如,它可以获取字符串中每个字符的代码,并用它执行一些确定性计算。在这种情况下,您不需要在关系表中使用。或者您可以使用CRC32将其转换为十进制形式(最多10位)。

创建一个表格,该表格将保存字符串和代码之间的关系。创建函数,该函数接受字符串,在表中搜索该字符串,如果未找到,则生成并插入唯一的随机(或下一步使用某些生成器)代码,然后返回代码(已找到或已生成)


或者创建一个函数,生成一些手工制作的“散列”。例如,它可以获取字符串中每个字符的代码,并用它执行一些确定性计算。在这种情况下,您不需要在关系表中使用。或者您可以使用CRC32将其转换为十进制形式(最多10位)。

编辑:我已经更改了函数

您可以使用regexp\u split\u to\u表


不幸的是,它不是独一无二的。它只计算给定单词的ascii数之和

编辑:我已经更改了功能

您可以使用regexp\u split\u to\u表


不幸的是,它不是独一无二的。它只计算给定单词的ascii数之和

@Akina这是个好主意,你能回答下面的问题吗?如果没有其他答案,我会将其标记为答案。转换为答案。@Akina这是个好主意,你能在下面回答吗?如果没有其他答案,我会将其标记为答案。转换为答案。
select md5('test1')
union all
select md5('test2')
with x as (
select 'test1' as word
union all
select 'test2'
union all
select 'test2'
union all
select 'test2'
union all
select 'test1'
union all
select 'test1'
)
select
    x.word,
    (select ('x'||substr(md5(x.word),1,16))::bit(64)::bigint)
from x;
with x as (
select 'test1' as word
union all
select 'test2'
union all
select 'test2'
union all
select 'test2'
union all
select 'test1'
union all
select 'test1'
)
select
    x.word,
    (select sum(ascii(regexp_split_to_table)) from regexp_split_to_table(x.word, ''))
from x;