怎么将mysql数据库中一个表的一个字段中的指定格式文字select出来?比如字段中有一些文字,其中有email地址,想把所有的email地址都列出来,怎么办例如:这个字段内容是{dede:field name='writer'}[email protected]{/dede:field},单独取出[email protected]给个例子吧,谢谢

解决方案 »

  1.   

    mysql> set @s='{dede:field name=\'writer\'}[email protected]{/dede:field}';
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@s, '{', 2), '}', -1);
    +-------------------------------------------------------+
    | SUBSTRING_INDEX(SUBSTRING_INDEX(@s, '{', 2), '}', -1) |
    +-------------------------------------------------------+
    [email protected]                                    |
    +-------------------------------------------------------+
    1 row in set (0.00 sec)mysql>
      

  2.   

    不是很理解,是不是匹配两个大括号里的?一个字段类似是这样:{dede:field name='keywords'}{/dede:field}
    {dede:field name='description'}{/dede:field}
    {dede:field name='title'}生生世世生生世世生{/dede:field}
    {dede:field name='writer'}[email protected]{/dede:field}
    {dede:field name='source'}{/dede:field}
    {dede:field name='pubdate'}{/dede:field}
    {dede:field name='body'}{/dede:field}
    {dede:field name='litpic'}{/dede:field}
    怎么把整张表的邮件地址都select出来呢?
      

  3.   

    mysql> select * from t_yisu145;
    +-----------------------------------------------------------+
    | s                                                         |
    +-----------------------------------------------------------+
    | {dede:field name='keywords'}{/dede:field}                 |
    | {dede:field name='description'}{/dede:field}              |
    | {dede:field name='title'}生生世世生生世世生{/dede:field}  |
    | {dede:field name='writer'}[email protected]{/dede:field} |
    | {dede:field name='source'}{/dede:field}                   |
    | {dede:field name='pubdate'}{/dede:field}                  |
    | {dede:field name='body'}{/dede:field}                     |
    | {dede:field name='litpic'}{/dede:field}                   |
    +-----------------------------------------------------------+
    8 rows in set (0.00 sec)mysql>
    mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(s,'{', 2),'}', -1)
        -> from t_yisu145
        -> where s like '%@%';
    +----------------------------------------------------+
    | SUBSTRING_INDEX(SUBSTRING_INDEX(s,'{', 2),'}', -1) |
    +----------------------------------------------------+
    [email protected]                                 |
    +----------------------------------------------------+
    1 row in set (0.00 sec)mysql>
      

  4.   

    SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( `result` , '{', 2 ) , '}', -1 ) 
    FROM `dede_co_htmls` 
    WHERE `result` LIKE '%@%'我这样写的,出来结果都是空的
      

  5.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  6.   

    -- phpMyAdmin SQL Dump
    -- version 3.2.4
    -- http://www.phpmyadmin.net
    --
    -- 主机: localhost
    -- 生成日期: 2010 年 08 月 31 日 09:51
    -- 服务器版本: 5.1.41
    -- PHP 版本: 5.3.1SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES gb2312 */;--
    -- 数据库: `dedecmsv56gbk`
    ---- ----------------------------------------------------------
    -- 表的结构 `dede_co_htmls`
    --CREATE TABLE IF NOT EXISTS `dede_co_htmls` (
      `aid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `nid` mediumint(8) unsigned NOT NULL DEFAULT '0',
      `typeid` smallint(5) unsigned NOT NULL DEFAULT '0',
      `title` varchar(60) NOT NULL DEFAULT '',
      `litpic` varchar(100) NOT NULL DEFAULT '',
      `url` varchar(100) NOT NULL DEFAULT '',
      `dtime` int(10) unsigned NOT NULL DEFAULT '0',
      `isdown` tinyint(1) unsigned NOT NULL DEFAULT '0',
      `isexport` tinyint(1) NOT NULL DEFAULT '0',
      `result` mediumtext,
      PRIMARY KEY (`aid`),
      KEY `nid` (`nid`),
      KEY `typeid` (`typeid`,`title`,`url`,`dtime`,`isdown`,`isexport`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=36038 ;--
    -- 转存表中的数据 `dede_co_htmls`
    --INSERT INTO `dede_co_htmls` (`aid`, `nid`, `typeid`, `title`, `litpic`, `url`, `dtime`, `isdown`, `isexport`, `result`) VALUES
    (1730, 3, 0, '佛教翁经济哦健康的水平', '', 'http://www.skycn.com/soft/59394.html', 1283231400, 1, 0, '{dede:field name=''keywords''}{/dede:field}\r\n{dede:field name=''description''}{/dede:field}\r\n{dede:field name=''title''}佛教翁经济哦健康的水平{/dede:field}\r\n{dede:field name=''writer''}[email protected]{/dede:field}\r\n{dede:field name=''source''}{/dede:field}\r\n{dede:field name=''pubdate''}{/dede:field}\r\n{dede:field name=''body''}{/dede:field}\r\n{dede:field name=''litpic''}{/dede:field}\r\n');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;导出一个结果是这样的,用SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( `result` , '{', 2 ) , '}', -1 ) FROM `dede_co_htmls`  WHERE `result` LIKE '%@%'选择出来是空的,
      

  7.   

    建议在程序中使用正规式来取吧。在MYSQL中可以通过复杂的SQL语句或者存储函数来实现。但效率不如果直接在程序中实现。