zoukankan      html  css  js  c++  java
  • MySQL字符串中抽取数值的方法 select -(-'123456@163.com'); 很牛逼

    原文:http://blog.itpub.net/23718752/viewspace-2146358/

    MySQL的字符串函数非常多,以至于有时候我不知道该如何灵活的使用这些函数。

    字符串基本信息函数     collation  convert,char_length等

    加密函数   password(x),encode,  aes_encrypt

    字符串连接函数   concat(x1,x2,….)

    修剪函数  trim,ltrim,rtrim
    子字符串操作函数 substring(x,start,length),mid(x,start,length)

    字符串复制函数  repeat,space

    字符串比较函数  strcmp
    字符串逆序函数 reverse

    如果真给一个场景,还真说不定能够拍胸脯适合。

    假设我有如下的需求,比如邮箱注册账号,指定账号是以数字开头,内容如下:

    1234@mail.com

    012345@aa.mail.com

    1234mm@mail.com

    1234test@mail.com

    如果需要把里面的数字提取出来,有什么好的办法呢。

    如果使用字符串函数,一种方式就是使用正则,或者直接给定条件来做过滤。

    比如replace(xxxx,right(xxx))

    还有一种思路就是创建一个函数或者存储过程,通过结构化的方法来做转换。

    如上的几种方法其实都比较麻烦,还有什么办法呢,我就举一反三,给出两个来。

    第一个解法就是使用字符串的数据类型转换。

    比如:

    mysql> select cast('123456@xx.com' as unsigned);
    +------------------------------------+
    | cast('123456@xx.com' as unsigned) |
    +------------------------------------+
    |                             123456 |
    +------------------------------------+
    1 row in set, 1 warning (0.00 sec)

    我们可以很明显看到结果和一个警告。

    mysql> show warnings;
    +---------+------+-----------------------------------------------------+
    | Level   | Code | Message                                             |
    +---------+------+-----------------------------------------------------+
    | Warning | 1292 | Truncated incorrect INTEGER value: '123456@163.com' |
    +---------+------+-----------------------------------------------------+
    1 row in set (0.00 sec)

    解法二:

    这个解法更简单,有种鬼斧神工的感觉。
    mysql> select -(-'123456@163.com');
    +----------------------+
    | -(-'123456@163.com') |
    +----------------------+
    |               123456 |
    +----------------------+
    1 row in set, 1 warning (0.00 sec)

    如果是前面含有冗余的数字,也是可以转换的。

    mysql> select -(-'012345@aa.mail.com');
    +--------------------------+
    | -(-'012345@aa.mail.com') |
    +--------------------------+
    |                    12345 |
    +--------------------------+
    1 row in set, 1 warning (0.00 sec)

  • 相关阅读:
    jquery each() 方法跳出循环
    webpack 启动 vue
    HTML DOM insertBefore() 方法 问题
    浮动元素的高度怎么撑起
    jquery toggle 方法被废除的替代方法
    函数声明和函数表达式
    href与src 区别
    ThreadLocal用法
    《计算机网络》ISO/OSI参考模型分层协议
    解决Idea创建的maven Web项目无法连接mysql数据库
  • 原文地址:https://www.cnblogs.com/shihaiming/p/12681883.html
Copyright © 2011-2022 走看看