Sql DB2-生成具有特定长度的随机字符串
我需要使用随机字符串更新DB2LUW数据库中几个字段中的数据。这是为了掩盖敏感信息。我在Oracle中使用了以下函数,并在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
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函数)
谢谢两件事:
- 使用
(ASCII“a”)代替97
(ASCII“a”)65
- 创建一个长字符串,并根据需要的长度获取其子字符串
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一起使用过