<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    badqiu

    XPer
    隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
    數(shù)據(jù)加載中……

    mysql map_get function,用于解析map結(jié)構(gòu)數(shù)據(jù),根據(jù)key返回相對應(yīng)value

    1.目的

    mysql的列是固定的,不支持存儲如Map 結(jié)構(gòu)的數(shù)據(jù),但現(xiàn)在我們的需求是希望有一個(gè) ext Map的擴(kuò)展列,可以存儲Map結(jié)構(gòu)的數(shù)據(jù),并且可以在mysql里面進(jìn)行運(yùn)算.(即schema free)。所以解決方案是創(chuàng)建一個(gè)map_get()函數(shù),可以根據(jù)key得到對應(yīng)的value
    函數(shù)功能:
    /*
    * 用于解析map結(jié)構(gòu)的數(shù)據(jù),根據(jù)傳入的inputKey返回相對應(yīng)的value
    * * @params
    * map: 自定義鍵值對的Map數(shù)據(jù)格式,輸入例子: username:badqiu,age:25,sex:F
    * key: 輸入key
    * @return 返回key對應(yīng)的value,如果沒有值,則返回null */
    map_get(map varchar2,key varchar2)

    2.實(shí)現(xiàn)

    set global log_bin_trust_function_creators = 1;
    /*
    map_get(map,inputKey)函數(shù)
    用于解析map結(jié)構(gòu)的數(shù)據(jù),根據(jù)傳入的inputKey返回相對應(yīng)的value
    */
    DROP FUNCTION IF EXISTS map_get;
    DELIMITER $$ -- 定義函數(shù)分隔符,必須要有,可以不是$$
    CREATE FUNCTION map_get( map varchar(5000), inputKey varchar(300) )
    RETURNS VARCHAR(255) BEGIN
    DECLARE rowSeperator char(1) default ','; -- 行分隔符
    DECLARE fieldSeperator char(1) default ':'; -- 鍵值對分隔符
    DECLARE tempMap varchar(255) default map;
    DECLARE isEnd boolean default false;
    DECLARE rowIndex int default 0;
    DECLARE pair varchar(255);
    DECLARE pairIndex varchar(255);
    DECLARE strKey varchar(255);
    DECLARE strValue varchar(255);
    WHILE isEnd = false do
    set rowIndex = locate(rowSeperator,tempMap);
    if rowIndex > 0 then
    set pair = substring(tempMap,1,rowIndex-1);
    set tempMap = substring(tempMap,rowIndex+1,9999999);
    else
    set pair = tempMap;
    set isEnd = true;
    end if;
    set pairIndex = locate(fieldSeperator,pair);
    if pairIndex > 0 then
    set strKey = substring(pair,1,pairIndex-1);
    set strValue = substring(pair,pairIndex+1,9999999);
    if inputKey = strKey then
    return strValue;
    end if;
    end if;
    END WHILE;
    return null; END $$
    DELIMITER; DROP FUNCTION IF EXISTS map_get_number;
    DELIMITER $$ -- 定義函數(shù)分隔符,必須要有,可以不是$$
    CREATE FUNCTION map_get_number( map varchar(5000), inputKey varchar(300) )
    RETURNS DECIMAL
    BEGIN
    return cast(map_get(map,inputKey) AS DECIMAL );
    END $$
    DELIMITER;
    

    3.測試

    select map_get('username:badqiu','username')
    union all
    select map_get('username:badqiu,age:100','not exist')
    union all
    select map_get_number('username:badqiu,age:200','age')
    union all
    select map_get_number('username:badqiu,age:200','agexxxxx')
    union all
    select map_get('username:badqiu,age:100','age');


    badqiu.iteye.com

    posted on 2012-12-14 10:50 badqiu 閱讀(1872) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲神级电影国语版| 亚洲精品无码高潮喷水在线| 亚洲国产精品成人久久久| 中文字幕版免费电影网站| 亚洲成AⅤ人影院在线观看| 国产亚洲视频在线播放大全| 国产又大又长又粗又硬的免费视频| 亚洲色大成网站www永久网站| 一区二区无码免费视频网站| 亚洲永久网址在线观看| 巨胸喷奶水视频www网免费| 精品亚洲成在人线AV无码| 免费人成网站在线观看10分钟| 亚洲国产精品久久网午夜| 永久免费av无码不卡在线观看 | 在线免费观看一区二区三区| 亚洲日韩国产二区无码| 免费人成在线观看网站品爱网日本| 美女视频黄频a免费观看| 亚洲毛片网址在线观看中文字幕| 国产免费AV片在线观看播放| 亚洲AV乱码久久精品蜜桃| 57pao一国产成视频永久免费 | 在线视频亚洲一区| 国产又长又粗又爽免费视频| 香蕉视频免费在线| 国产精品亚洲综合一区| 成人无码a级毛片免费| 亚洲第一香蕉视频| 四虎影视www四虎免费| 亚州**色毛片免费观看| 亚洲AV无码乱码在线观看富二代 | 免费无码黄网站在线观看| 人妻免费久久久久久久了| 亚洲A∨无码一区二区三区| 一二三四在线观看免费高清中文在线观看 | 国产精品永久免费视频| 午夜亚洲国产理论秋霞| 午夜电影免费观看| 国内精品久久久久影院免费| 亚洲天堂免费在线|