如何生成值为“AAAAAA”到“ZZZZZZ”的唯一随机CHAR(6)?

时间:2012-07-12 00:57:44

标签: sql informix

我不是一个老练的开发人员,正如你们中的一些人已经知道的那样,但也许你可以帮我解决这个问题的粗略设计?

我想模仿航空公司预订系统为其主键随机生成唯一记录定位器的方式。生成的值中没有一个可以形成淫秽单词,其他指定值,或者在现有行中是否重复,因此需要包含禁止值的单独查找表?

编辑:使用有效密钥填充表并随机选择尚未使用key_already_used标志更新的行以生成值,或者应该由用户定义的函数随机生成值是否更好? ,抬头看看它是否在禁止值表中,然后抬头看看是否还没有插入预订表?

1 个答案:

答案 0 :(得分:1)

Here就是一个很好的例子。

要从int转换为char序列:

create function CustomerNumber (@id int) 
returns char(5) 
as 
begin 
  return char(@id / power(26,3) % 26 + 65) + 
     char(@id / power(26,2) % 26 + 65) + 
     char(@id / 26 % 26 + 65) + 
     char(@id % 26 + 65) 
end

然后你所要做的就是传递一个唯一的整数,你会得到一个唯一的字符串(或随机整数,你会得到一个随机字符串)

(只记得随机唯一不一样)

我猜在informix中应该看起来像这样吗?

CREATE FUNCTION CustomerNumber (id int)
RETURNING char(5);
 RETURN integer::char(id / POW(26,3) % 26 + 65) + 
         integer::char(id / POW(26,2) % 26 + 65) + 
         integer::char(id / 26 % 26 + 65) + 
         integer::char(id % 26 + 65) 
END FUNCTION