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

h22fl7wq  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(212)

我需要用随机字符串更新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函数)?
谢谢

3npbholx

3npbholx1#

Rajat将此与Rpad一起用于长度,而不是1000000000

TRANSLATE ( CHAR(BIGINT(RAND() * 10000000000 )), 'abcdefghij', '1234567890' )
7jmck4yq

7jmck4yq2#

两件事:

  • 请使用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)
  , least(30, length(name)) )
from product;

结果:

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

确保使用表达式min(30, length(name))来表示长度,否则,如果您要获取比varchar中可用的字符更多的字符,DB2会崩溃。

相关问题