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

Sql DB2-生成具有特定长度的随机字符串,sql,db2,Sql,Db2,我需要使用随机字符串更新DB2LUW数据库中几个字段中的数据。这是为了掩盖敏感信息。我在Oracle中使用了以下函数,并在DB2中寻找等效函数: DBMS_RANDOM.STRING ('L', length(NAME)) 这里的名称是字段,L代表小写。此函数生成与字段值长度相同的小写字符串 我发现了以下在DB2中生成随机字符串的方法: CHR(INT(RAND()*26)+65) || CHR(INT(RAND()*26)+65) || CHR(INT(RAND()*26)+65) || C

我需要使用随机字符串更新DB2LUW数据库中几个字段中的数据。这是为了掩盖敏感信息。我在Oracle中使用了以下函数,并在DB2中寻找等效函数:

DBMS_RANDOM.STRING ('L', length(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函数)

谢谢两件事:

  • 使用
    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,长度(名称))
表示长度。否则,如果您想从varchar中获取比可用字符更多的字符,DB2就会崩溃。

Rajat将其与Rpad一起用于长度,而不是100000000

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

上面的字符串接8个字符。每个字符都是从大写字母范围生成的。调整它。@data\u henrik,你能建议我如何根据字段中值的长度限制长度(类似于oracle函数)吗?非常感谢!这解决了我查询的一部分。第二部分是根据字段值的长度限制长度(类似于oracle函数)。我希望有帮助。谢谢。这很有效。我已经将它与子字符串函数-SUBSTRING(TRANSLATE(CHAR(BIGINT(RAND()*10000000000)),'abcdefghijklmnopqrstuvxyz','1234567890'),1,length(FIRSTNAME),CODEUNITS16一起使用过