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