繁体   English   中英

编辑特定列上的 DB2 数据

[英]Edit DB2 data on specific column

提前感谢您的帮助...我必须在我的 DB2 数据库上编辑一些数据 - 使用版本 11。基本上我有一个包含多个条目的列,如下所示:<GUID=b92c4c2340953g98hn298743n5634234> 我需要它们查看像这样:b92c4c23-4095-3g98-hn29-8743n5634234

注意** 我正在尝试创建一个 function 接受值 A (<GUID=b92c4c2340953g98hn298743n5634234>) 并返回值 B (b92c4c23-4095-3g98-hn29-8743n5634234)

使用 substring function 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                           

如果你经常这样做,你可能想要创建一个 function:

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 本身的效率比 integer 序列标识符低(从数据库的角度来看)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM