暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基于模式生成字符串

ASKTOM 2020-10-19
442

问题描述

嗨,奇尔斯,康纳,
您能否帮助或建议一种基于模式生成字符串的方法

图案-^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$

我需要生成数百万个字符串f9f8c8e2-0b20-4160-8f74-e836f4661fc5与模式匹配。

例如。
SELECT * FROM dual WHERE REGEXP_LIKE('f9f8c8e2-0b20-4160-8f74-e836f4661fc5', '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$');
复制



专家解答

你生成这些字符串到底是为了什么?看起来像MD5哈希。

如果这是你要找的,你可以使用标准哈希生成输入值:

select lower ( standard_hash ( dummy, 'MD5' ) ) str
from   dual;

STR                                
02129bb861061d1a052c592e2dc6b383 
复制


如果你需要它的格式如图所示,使用一些substr操作:

with rws as (
  select lower ( standard_hash ( dummy, 'MD5' ) ) str
  from   dual
)
  select substr ( str, 1, 8 ) || '-' || 
         substr ( str, 9, 4 ) || '-' || 
         substr ( str, 13, 4 ) || '-' || 
         substr ( str, 17, 4 ) || '-' || 
         substr ( str, 21 ) md5
  from   rws;
  
MD5                                    
02129bb8-6106-1d1a-052c-592e2dc6b383   
复制


这为每个输入字符串提供了不同的值:

with rws as (
  select level val, lower ( standard_hash ( level, 'MD5' ) ) str
  from   dual
  connect by level <= 5
)
  select substr ( str, 1, 8 ) || '-' || 
         substr ( str, 9, 4 ) || '-' || 
         substr ( str, 13, 4 ) || '-' || 
         substr ( str, 17, 4 ) || '-' || 
         substr ( str, 21 ) md5
  from   rws;
  
MD5                                    
dcf82b57-bab4-a7fc-b9c2-f14353c7460b    
8dafe7ba-c683-b104-0a19-fc449c8f8743    
42f95b73-6dba-041c-a8f8-f3ae0af67660    
155da696-6e67-ad17-7958-54cf5e2ee33e    
fc966bc5-914a-0499-b45e-554aedf3418f
复制


如果您需要具有十六进制值1-f的随机字符串,则可以使用dbms_random生成值1-16。然后to_char它们与XX格式掩码为十六进制:
select listagg ( to_char ( dbms_random.value ( 1, 16 ), 'fmxx' ) )
         within group ( order by level ) str
from   dual
connect by level <= 8

STR         
67fb3eb10  
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论