提前感谢您的帮助。。。我必须编辑DB2数据库上的一些数据——使用版本11。基本上,我有一个包含多个条目的列,如下所示:<GUID=b92c4c2340953g98hn298743n5634234>我需要它们看起来像这样:b92c4c23-4095-3g98-hn29-8743n5634234
备注**我正在尝试创建一个函数,该函数接受值a(<GUID=b92c4c2340953g98hn298743n5634234>(并返回值B(b92c4c23-4095-3g98-hn29-8743n5634234(
使用子字符串函数SUBSTR
如下:
SUBSTR(SUBSTR(your_column, 1, LENGTH(your_column) - 1), 7)
示例:
with t(s) as (
values '<GUID=b92c4c2340953g98hn298743n5634234>'
), strip(s) as (
select substr(s,7,length(s)-7) from t
)
select substr(s,1,8) || '-' || substr(s,9,4) || '-' || substr(s,13,4) || '-'
|| substr(s,17,4) || '-' || substr(s,21)
from strip;
1
---------------------------------------------------------------
b92c4c23-4095-3g98-hn29-8743n5634234
如果你经常这样做,你可能想创建一个函数:
create function trim_guid(s varchar(39))
returns varchar(36)
return with strip(s) as (
values substr(s,7,length(s)-7)
) select substr(s,1,8) || '-' || substr(s,9,4) || '-'
|| substr(s,13,4) || '-' || substr(s,17,4) || '-'
|| substr(s,21) from strip
with t(s) as ( values '<GUID=b92c4c2340953g98hn298743n5634234>' )
select trim_guid(s) from t
1
------------------------------------
b92c4c23-4095-3g98-hn29-8743n5634234
Db2有一些用于处理GUID值的内置设施。有一些函数可以将它们转换为二进制和字符表示。
如果数据是有效的GUID,则可以使用以下示例返回字符GUID表示。
VALUES
VARCHAR_FORMAT_BIT(
CAST(HEXTORAW(SUBSTR('<GUID=d83d6360181811db9804b622a1ef5492>',7,32)) AS CHAR(16) FOR BIT DATA)
, 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
)
将返回
d83d6360-1818-11db-9804-b622a1ef5492
不用说,将数据存储为BINARY(16)
(也称为CHAR(16) FOR BIT DATA
(通常比使用例如VARCHAR(32)
更有效。即使GUID本身(从数据库的角度来看(不如例如整数序列标识符有效。