gpt4 book ai didi

java - ORACLE RAW 字符串格式到标准 GUID

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:36 25 4
gpt4 key购买 nike

我正在尝试寻找将 String 格式的 Oracle RAW GUID 转换为标准 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 的更标准方法,因为 SYS_GUID() 的 Oracle 实现不符合 RFC 4122。参见 Is Oracle's SYS_GUID() UUID RFC 4122 compliant?

关于java - ORACLE RAW 字符串格式到标准 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com