SQL中常用的文本处理函数和日期时间处理函数

SQL中常用的文本处理函数和日期时间处理函数

常用文本处理函数

  • CONCAT(str1, str2, ...):拼接字符串

    mysql> SELECT CONCAT('There', ' is', ' an', ' apple.');
    +------------------------------------------+
    | CONCAT('There', ' is', ' an', ' apple.') |
    +------------------------------------------+
    | There is an apple.                       |
    +------------------------------------------+
    
  • CONCAT_WS(separator, str1, str2, ...):使用指定分隔符连接字符串

    mysql> SELECT CONCAT_WS('-', 'There', 'is', 'an', 'apple');
    +----------------------------------------------+
    | CONCAT_WS('-', 'There', 'is', 'an', 'apple') |
    +----------------------------------------------+
    | There-is-an-apple                            |
    +----------------------------------------------+
    
  • LEFT(str, length):从左截取指定长度的子字符串

    mysql> SELECT LEFT('ZHANG SAN', 5);
    +----------------------+
    | LEFT('ZHANG SAN', 5) |
    +----------------------+
    | ZHANG                |
    +----------------------+
    
  • RIGHT(str, length):从右截取指定长度的子字符串

    mysql> SELECT RIGHT('ZHANG SAN', 3);
    +-----------------------+
    | RIGHT('ZHANG SAN', 3) |
    +-----------------------+
    | SAN                   |
    +-----------------------+
    
  • SUBSTRING(str, index, length):从指定位置处开始截取指定长度的子字符串

     mysql> SELECT SUBSTRING('ABCDEFG', 3, 4);
     +----------------------------+
     | SUBSTRING('ABCDEFG', 3, 4) |
     +----------------------------+
     | CDEF                       |
     +----------------------------+
    
  • LENGTH(str):返回字符串的长度

    mysql> SELECT LENGTH('ZHANG SAN');
    +---------------------+
    | LENGTH('ZHANG SAN') |
    +---------------------+
    |                   9 |
    +---------------------+
    
  • LOWER(str):将字符串转换为小写格式

    mysql> SELECT LOWER('ZHANG SAN');
    +--------------------+
    | LOWER('ZHANG SAN') |
    +--------------------+
    | zhang san          |
    +--------------------+
    
  • UPPER(str):将字符串转换为大写格式

    mysql> SELECT UPPER('zhang san');
    +--------------------+
    | UPPER('zhang san') |
    +--------------------+
    | ZHANG SAN          |
    +--------------------+
    
  • LTRIM(str):去除字符串左侧的空格

    mysql> SELECT CONCAT('(', LTRIM('   LEFT'), ')');
    +------------------------------------+
    | CONCAT('(', LTRIM('   LEFT'), ')') |
    +------------------------------------+
    | (LEFT)                             |
    +------------------------------------+
    
  • RTRIM(str):去除字符串右侧的空格

    mysql> SELECT CONCAT('(', RTRIM('RIGHT   '), ')');
    +-------------------------------------+
    | CONCAT('(', RTRIM('RIGHT   '), ')') |
    +-------------------------------------+
    | (RIGHT)                             |
    +-------------------------------------+
    
  • TRIM(str):去除字符串两侧的空格

    mysql> SELECT CONCAT('(', TRIM('   MIDDLE   '), ')');
    +----------------------------------------+
    | CONCAT('(', TRIM('   MIDDLE   '), ')') |
    +----------------------------------------+
    | (MIDDLE)                               |
    +----------------------------------------+
    
  • ELT(index, str1, str2, ...):返回字符串序列中指定位置的字符串

    mysql> SELECT ELT(3, 'A', 'B', 'C', 'D');
    +----------------------------+
    | ELT(3, 'A', 'B', 'C', 'D') |
    +----------------------------+
    | C                          |
    +----------------------------+
    
  • FIELD(str, str1, str2, ...):返回指定字符串str在字符串序列中的位置,找不到返回0

    mysql> SELECT FIELD('C', 'A', 'B', 'C', 'D');
    +--------------------------------+
    | FIELD('C', 'A', 'B', 'C', 'D') |
    +--------------------------------+
    |                              3 |
    +--------------------------------+
    
  • FIND_IN_SET(str, stringList):返回指定字符串str在由“,”分割的字符串序列中的位置

    mysql> SELECT FIND_IN_SET('C', 'A,B,C,D');
    +-----------------------------+
    | FIND_IN_SET('C', 'A,B,C,D') |
    +-----------------------------+
    |                           3 |
    +-----------------------------+
    
  • FORMAT(X, D):按照指定的小数位数D将数值X转化为字符串

    mysql> SELECT FORMAT(123.45678, 2);
    +----------------------+
    | FORMAT(123.45678, 2) |
    +----------------------+
    | 123.46               |
    +----------------------+
    
  • INSERT(str, index, length, newString):从指定位置开始用新字符串替换原字符串中指定长度的字符,index超出原字符串范围时返回原字符串

    mysql> SELECT INSERT('ABCDEF', 3, 3, '123');
    +-------------------------------+
    | INSERT('ABCDEF', 3, 3, '123') |
    +-------------------------------+
    | AB123F                        |
    +-------------------------------+
    
  • LOCATE(substr, str):返回子字符串在指定字符串中第一次出现的位置

    LOCATE(substr, str, index):从指定字符串的指定位置处开始查找子字符串出现的位置

    找不到返回0

    mysql> SELECT LOCATE('a', 'banana');
    +-----------------------+
    | LOCATE('a', 'banana') |
    +-----------------------+
    |                     2 |
    +-----------------------+
    
    mysql> SELECT LOCATE('a', 'banana', 3);
    +--------------------------+
    | LOCATE('a', 'banana', 3) |
    +--------------------------+
    |                        4 |
    +--------------------------+
    
  • LPAD(str, length, padStr):在字符串左侧用padStr将原字符串填充至指定长度,当指定长度小于原字符串长度时,截断原字符串

    mysql> SELECT LPAD('HELLO', 8, '!');
    +-----------------------+
    | LPAD('HELLO', 8, '!') |
    +-----------------------+
    | !!!HELLO              |
    +-----------------------+
    
  • RPAD(str, length, padStr):在字符串右侧用padStr将原字符串填充至指定长度,当指定长度小于原字符串长度时,截断原字符串

    mysql> SELECT RPAD('HELLO', 8, '!');
    +-----------------------+
    | RPAD('HELLO', 8, '!') |
    +-----------------------+
    | HELLO!!!              |
    +-----------------------+
    
  • REPEAT(str, times):按照指定次数重复字符串

    mysql> SELECT REPEAT('LA', 3);
    +-----------------+
    | REPEAT('LA', 3) |
    +-----------------+
    | LALALA          |
    +-----------------+
    
  • REPLACE(str, from_str, to_str):将字符串中的所有匹配的字符串替换为新字符串

    mysql> SELECT REPLACE('LALALA', 'L', 'B');
    +-----------------------------+
    | REPLACE('LALALA', 'L', 'B') |
    +-----------------------------+
    | BABABA                      |
    +-----------------------------+
    
  • REVERSE(str):将字符串逆序输出

    mysql> SELECT REVERSE('ABC');
    +----------------+
    | REVERSE('ABC') |
    +----------------+
    | CBA            |
    +----------------+
    

常用日期和时间处理函数

  • NOW():返回当前的时间和日期

    mysql> SELECT NOW();
    +---------------------+
    | NOW()               |
    +---------------------+
    | 2019-03-25 18:01:47 |
    +---------------------+
    
  • CURDATE():返回当前的日期

    mysql> SELECT CURDATE();
    +------------+
    | CURDATE()  |
    +------------+
    | 2019-03-25 |
    +------------+
    
  • CURTIME():返回当前时间

    mysql> SELECT CURTIME();
    +-----------+
    | CURTIME() |
    +-----------+
    | 18:05:02  |
    +-----------+
    
  • DATE(dateAndTime):提取日期时间表达式中的日期部分

    mysql> SELECT DATE(NOW());
    +-------------+
    | DATE(NOW()) |
    +-------------+
    | 2019-03-25  |
    +-------------+
    
  • DAY():返回日期时间表达式中的天数部分

    mysql> SELECT DAY(NOW());
    +------------+
    | DAY(NOW()) |
    +------------+
    |         25 |
    +------------+
    
  • YEAR():返回日期时间表达式中的年部分

    mysql> SELECT YEAR(NOW());
    +-------------+
    | YEAR(NOW()) |
    +-------------+
    |        2019 |
    +-------------+
    
  • EXTRACT(unit FROM date):按照指定的时间单位从日期时间表达式中提取年、月、日、时间等部分

    mysql> SELECT EXTRACT(YEAR FROM NOW());
    +--------------------------+
    | EXTRACT(YEAR FROM NOW()) |
    +--------------------------+
    |                     2019 |
    +--------------------------+
    
    mysql> SELECT EXTRACT(WEEK FROM NOW());
    +--------------------------+
    | EXTRACT(WEEK FROM NOW()) |
    +--------------------------+
    |                       12 |
    +--------------------------+
    
    mysql> SELECT EXTRACT(HOUR_MICROSECOND FROM NOW());
    +--------------------------------------+
    | EXTRACT(HOUR_MICROSECOND FROM NOW()) |
    +--------------------------------------+
    |                         191218000000 |
    +--------------------------------------+
    

    时间单位的值可参考Temporal Intervals文档

  • DATE_FORMAT(date, format):按照指定格式显示时间日期

    可选的格式可参考Date and time functions

    mysql> SELECT DATE_FORMAT(NOW(), '%W %M %Y');
    +--------------------------------+
    | DATE_FORMAT(NOW(), '%W %M %Y') |
    +--------------------------------+
    | Monday March 2019              |
    +--------------------------------+
    
  • DATE_ADD(date, INTERVAL exp unit)DATE_SUB(date, INTERVAL exp unit):日期和时间的加减操作。返回值是否包含时间取决于给定的时间日期的表达式和时间单位。

    mysql> SELECT DATE_ADD('2018-03-25', INTERVAL 1 DAY);
    +----------------------------------------+
    | DATE_ADD('2018-03-25', INTERVAL 1 DAY) |
    +----------------------------------------+
    | 2018-03-26                             |
    +----------------------------------------+
    
    mysql> SELECT DATE_SUB('2018-03-25 19:26:47', INTERVAL 1 HOUR);
    +--------------------------------------------------+
    | DATE_SUB('2018-03-25 19:26:47', INTERVAL 1 HOUR) |
    +--------------------------------------------------+
    | 2018-03-25 18:26:47                              |
    +--------------------------------------------------+
    
  • DATEDIFF(date1, date2):返回两个日期的差值,会忽略表达式中的时间,仅对日期进行运算

    mysql> SELECT DATEDIFF('2018-4-30', NOW());
    +------------------------------+
    | DATEDIFF('2018-4-30', NOW()) |
    +------------------------------+
    |                         -329 |
    +------------------------------+
    1 row in set (0.00 sec)
    
  • ADDDATE(date, INTERVAL exp unit):等同于DATE_ADD()

    ADDDATE(date, days):在给定的日期上加上给定的天数

    mysql> SELECT ADDDATE(NOW(), 31);
    +---------------------+
    | ADDDATE(NOW(), 31)  |
    +---------------------+
    | 2019-04-25 19:39:53 |
    +---------------------+
    
  • ADDTIME(time1, time2):将两个时间表达式相加

    mysql> SELECT ADDTIME('10:33:24', '22:23:22');
    +---------------------------------+
    | ADDTIME('10:33:24', '22:23:22') |
    +---------------------------------+
    | 32:56:46                        |
    +---------------------------------+
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,780评论 5 116
  • MySql取得日期(前一天、某一天) 取得当天: SELECT curdate(); mysql> SELECT ...
    laravel阅读 1,640评论 0 4
  • -- MySQL日期时间处理函数 -- 当前日期:2017-05-12(突然发现今天512,是不是会拉防空警报) ...
    sph_ui阅读 3,378评论 2 3
  • 一个同学给我发了今年的接本招生计划,一年前的这段时间,自己还是一个准备接本的人,同时也在放弃,这段时间接本报名的日...
    归来仍是少年ii阅读 232评论 0 0
  • 终于下定决心要参加日更挑战了,因为在写作训练营21天里养成的好习惯已经不能让我坚持下去。 战胜懒惰,靠自己的自制力...
    今朝花树下阅读 68评论 0 0