簡體   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