怎样随机生成 常用汉字字符串?

wilowind 2007-07-04 03:39:04
用下面的过程产生的 是乱码

望达人解惑

create or replace function getRanWords return varchar2 as
out_name varchar2(100);
i integer;
begin
for i in 1..10 loop
--out_name:=out_name||chr(33344+mod(dbms_random.random(),28095));
out_name:=out_name||chr(33343+trunc(dbms_random.value(1,28095)));
end loop;
return out_name;
end;

...全文
349 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobfang 2007-07-04
  • 打赏
  • 举报
回复
create or replace function getRanWords return varchar2 as
out_name varchar2(100);
i integer;
begin
for i in 1..10 loop
--out_name:=out_name||chr(33344+mod(dbms_random.random(),28095));
out_name:=out_name||chr(trunc(dbms_random.value(176,248))*256+trunc(dbms_random.value(161,255)));
end loop;
return out_name;
end;
wilowind 2007-07-04
  • 打赏
  • 举报
回复
33343开始到33343 +28095 是网上找的。 研究了下, 正常范围应该是
区位码 一级汉字从1601-1694,1701-1794,.....5401-5494,5501-5589,共94*40-5=3755 个汉字

字符集默认的

乱码是部分。

综上改了下:
create or replace function getRanWords return varchar2 as
out_name varchar2(100);
m integer;
n integer;
i integer;
begin
for i in 1..10 loop
m:=mod(abs(dbms_random.random()),39)+16;
n:=mod(abs(dbms_random.random()),94)+1;
out_name:=out_name||chr((m+160)*16*16+n+160);
end loop;
return out_name;
end;

可用,揭帖

wangzk0206 2007-07-04
  • 打赏
  • 举报
回复
1:你怎么知道中文的范围是从33343开始到33343 +28095

2:你的数据库是什么字符集?

3:你的测试所有的都是乱码吗?还是部分有乱码?应该是部分吧。

mao5588 2007-07-04
  • 打赏
  • 举报
回复
怎么没有人会的啊,顶下!

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧