我试图寻找一个解决方案转换Oracle RAW GUID
的String
格式为标准GUID
格式。我找不到用例的解决方案。这是我要寻找的示例:
ORACLE RAW (String): 9BB2A2B8DF8747B0982F2F1702E1D18B
需要使用Java代码将其转换为标准或带括号的GUID,
B8A2B29B-87DF-B047-982F-2F1702E1D18B or {B8A2B29B-87DF-B047-982F-2F1702E1D18B}
感谢您的帮助。
一种简单的方法是在选择RAW GUID时将其转换为VARCHAR。然后从结果集中将其读取为字符串。这是公式:
select
upper(
regexp_replace(
regexp_replace(
hextoraw('9BB2A2B8DF8747B0982F2F1702E1D18B'),
'(.{8})(.{4})(.{4})(.{4})(.{12})',
'\1-\2-\3-\4-\5'
),
'(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})',
'\4\3\2\1-\6\5-\8\7\9'
)
) from dual
这是我在其中找到查询的参考(由于原始错误,我必须对其进行调整):https : //community.oracle.com/thread/1063096?tstart=0。
或者,如果您想使用Java来做到这一点,那么用Java转换上述解决方案就非常简单了:
/**
* input: "9BB2A2B8DF8747B0982F2F1702E1D18B"
* output: "B8A2B29B-87DF-B047-982F-2F1702E1D18B";
*/
public String hexToStr(String guid) {
return guid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.{12})", "$1-$2-$3-$4-$5").replaceAll("(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})", "$4$3$2$1-$6$5-$8$7$9");
}
使用该类的更标准的方式是java.util.UUID
不可能的,因为Oracle的实现SYS_GUID()
与RFC 4122不兼容。请参见Oracle的SYS_GUID()UUID RFC 4122是否兼容?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句