DB2-生成具有特定长度的随机字符串

时间:2018-08-21 13:02:47

标签: sql db2

我需要使用随机字符串更新DB2 LUW数据库的几个字段中的数据。这是用于屏蔽敏感信息。我在Oracle中使用了以下功能,并在DB2中寻找了等效功能:

DBMS_RANDOM.STRING ('L', length(NAME))

此处NAME是该字段,L代表小写字母。此函数生成一个小写的字符串,其长度与字段值相同。

我发现以下方法可以在DB2中生成随机字符串:

CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)
|| CHR(INT(RAND()*26)+65)

我的查询- 1)如何生成小写的随机字符串? 2)如何限制生成的字符串的长度与字段值的长度相同(类似于oracle函数)?

谢谢

2 个答案:

答案 0 :(得分:2)

Rajat与Rpad一起使用,代替1000000000的长度

b1

答案 1 :(得分:0)

两件事:

  • 使用97(ASCII“ a”)代替65(ASCII“ A”)。
  • 创建一个长字符串并根据您想要的长度获取它的子字符串。

例如,如果您假设您的姓名最长为30个字符,则为:

select name, 
  left(
     CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97) || CHR(INT(RAND()*26)+97)
  , min(30, length(name)) )
from product;

结果:

NAME      2                               
--------  --------
Gonzalez  qldycihq
Coyote    rocpnw

确保长度使用表达式min(30, length(name))。否则,如果您要使用的字符数超过varchar中可用的字符数,则DB2崩溃。