编辑特定列上的DB2数据



提前感谢您的帮助。。。我必须编辑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本身(从数据库的角度来看(不如例如整数序列标识符有效。

最新更新