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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    Mysql 實現split字符串分割


    --場景大致如下:有A B兩表,A表中的某一字段bids存放著一個B表主鍵的數組如3,4,5 而這個時候要做關聯查詢的時候,理想情況應該可以這樣做
    select b.* from A a,B b where b.id in (a.bids.split(',')) 但是mysql并不支持這樣做,也沒有提供類似的做法,所以很糟糕。 有一種變態的做法就是給bids做一下處理,就是
    在bids的前后都加上逗號, 這樣bids就變成,3,4,5, 這個時候利用模糊查詢來做關聯就可以達到目的了,做法如下:
    select b.* from A a, B b where CONCAT(CONCAT(',',a.bids),','LIKE CONCAT(CONCAT('%,',b.id),',%'

    當b的id
    =3時候的查詢相當于執行
    select b.* from A a, B b where  ',3,4,5,' LIKE  '%,3,%'

    ----真實例子----
    SELECT t.*
    FROM tea_material_trade t ,tea_process_product p WHERE p.id =2 AND  CONCAT(CONCAT(',',p.tradeids),','LIKE CONCAT(CONCAT('%,',t.id),',%'


    --值得注意的是,這樣的效率恐怕比較低,小數據量應該沒有問題,大數據量估計不能這么做



    mysql像個蛋一樣,連基本的函數都不提供,難怪被oracle買了。只有通過存儲過程來搞,郁悶得不行。

    DELIMITER $$

    USE `teasys`$$

    DROP PROCEDURE IF EXISTS `proc_split`$$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_split`(
        inputstring 
    VARCHAR(1000),
        delim 
    CHAR(1)
    )
    BEGIN
        
    DECLARE strlen INT;
        
    DECLARE last_index INT;
        
    DECLARE cur_index INT;
        
    DECLARE cur_char VARCHAR(200);
        
    DECLARE len INT;
        
    SET cur_index=1;
        
    SET last_index=0;
        
    SET strlen=LENGTH(inputstring);  
        
    DROP TABLE IF EXISTS splittable;
        
    CREATE TEMPORARY TABLE splittable(
            id 
    INT AUTO_INCREMENT,
            VALUE 
    VARCHAR(20),
            
    PRIMARY KEY (`ID`),
            
    UNIQUE KEY `ID` (`ID`)
        ) ;
        
    WHILE(cur_index<=strlen) DO    
        
    BEGIN
            
    IF SUBSTRING(inputstring FROM cur_index FOR 1)=delim OR cur_index=strlen THEN
                
    SET len=cur_index-last_index-1;
                
    IF cur_index=strlen THEN
                   
    SET len=len+1;
                
    END IF;
                
    INSERT INTO splittable(`value`)VALUES(SUBSTRING(inputstring FROM (last_index+1FOR len));
                
    SET last_index=cur_index;
            
    END IF;
            
    SET cur_index=cur_index+1;
        
    END;
        
    END WHILE;
    END$$

    DELIMITER ;


    CALL proc_split(
    'a,b,c',',');
    SELECT * FROM splittable

    posted on 2011-02-26 21:28 都市淘沙者 閱讀(9537) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

    主站蜘蛛池模板: 日韩毛片免费无码无毒视频观看| 免费人成网站在线播放| 亚洲国产精品无码久久久蜜芽 | 亚洲天天做日日做天天欢毛片 | 免费毛片毛片网址| 成全影视免费观看大全二| 亚洲日韩一区精品射精| 香蕉97超级碰碰碰免费公| 亚洲精品国产福利在线观看| 青青操免费在线观看| 亚洲国产综合无码一区| 四虎影视成人永久免费观看视频 | 久久亚洲精品中文字幕无码| 亚洲视频在线免费观看| 亚洲欧洲日产v特级毛片| 一二三四在线播放免费观看中文版视频| 亚洲字幕在线观看| 好男人视频社区精品免费| 特级毛片A级毛片100免费播放| 亚洲中文字幕无码一久久区| 未满十八18禁止免费无码网站| 亚洲国产精品线观看不卡| 大地资源二在线观看免费高清| 精品无码专区亚洲| 国产亚洲精品va在线| 曰批视频免费30分钟成人| 最新亚洲人成网站在线观看| 久久精品国产亚洲AV不卡| 久久免费国产精品一区二区| 亚洲乱码中文字幕小综合| jizzjizz亚洲| 最近中文字幕完整版免费高清| 亚洲国产美女精品久久久| 亚洲中文字幕第一页在线| 香蕉97超级碰碰碰免费公| 免费无遮挡无遮羞在线看| 久久久亚洲欧洲日产国码二区 | 亚洲第一区视频在线观看| 国产无遮挡又黄又爽免费视频| 中文在线免费观看| 亚洲一卡2卡三卡4卡无卡下载|