数据处理函数

电玩女神 2022-05-10 09:46 316阅读 0赞

1.文本处理函数

比如UPPER函数是将小写变成大写。

  1. mysql> SELECT request_uri,UPPER(request_uri) from sys_log; +---------------------------+---------------------------+ | request_uri | UPPER(request_uri) | +---------------------------+---------------------------+ | /a/cms/article/ | /A/CMS/ARTICLE/ | | /a/cms/article/draftsSave | /A/CMS/ARTICLE/DRAFTSSAVE | | /a/cms/article/save | /A/CMS/ARTICLE/SAVE | | /a/cms/guestbook/ | /A/CMS/GUESTBOOK/ | | /a/cms/guestbook/save | /A/CMS/GUESTBOOK/SAVE | | /a/cms/tree | /A/CMS/TREE | | /a/gen/genTable/ | /A/GEN/GENTABLE/ | | /a/oa/leave/list | /A/OA/LEAVE/LIST | | /a/sys/user/info | /A/SYS/USER/INFO | | /a/sys/user/info | /A/SYS/USER/INFO | | /hyd/a/sys/office/list | /HYD/A/SYS/OFFICE/LIST | | /hyd/a/sys/user/info | /HYD/A/SYS/USER/INFO | +---------------------------+---------------------------+ 12 rows in set

类似的文本处理函数有:


































































名称 调用示例 示例结果 描述
LEFT LEFT(‘abc123’, 3) abc 返回从左边取指定长度的子串
RIGHT RIGHT(‘abc123’, 3) 123 返回从右边取指定长度的子串
LENGTH LENGTH(‘abc’) 3 返回字符串的长度
LOWER LOWER(‘ABC’) abc 返回小写格式字符串
UPPER UPPER(‘abc’) ABC 返回大写格式字符串
LTRIM LTRIM(’ abc’) abc 将字符串左边空格去除后返回
RTRIM RTRIM(‘abc ‘) abc 将字符串右边空格去除后返回
SUBSTRING SUBSTRING(‘abc123’, 2, 3) bc1 从字符串第2位开始截取3位字符
CONCAT CONCAT(‘abc’, ‘123’, ‘xyz’) abc123xyz 将各个字符串参数拼接成一个新的字符串

比如:

  1. mysql> SELECT LEFT('abc123',3); +------------------+ | LEFT('abc123',3) | +------------------+ | abc | +------------------+ 1 row in set mysql> select RIGHT('abc123', 3); +--------------------+ | RIGHT('abc123', 3) | +--------------------+ | 123 | +--------------------+ 1 row in set mysql> select length('abc'); +---------------+ | length('abc') | +---------------+ | 3 | +---------------+ 1 row in set mysql> select ltrim(' abc'); +---------------+ | ltrim(' abc') | +---------------+ | abc | +---------------+ 1 row in set mysql> select substring('1234567',2,3) ; +--------------------------+ | substring('1234567',2,3) | +--------------------------+ | 234 | +--------------------------+ 1 row in set mysql> select concat('a','b','c','d'); +-------------------------+ | concat('a','b','c','d') | +-------------------------+ | abcd | +-------------------------+ 1 row in set

2.日期和时间处理函数

常见的时间计算类型:







































































SECOND SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY DAYS
MONTH MONTHS
YEAR YEARS
MINUTE_SECOND 分钟和秒 “MINUTES:SECONDS”
HOUR_MINUTE 小时和分钟 “HOURS:MINUTES”
DAY_HOUR 天和小时 “DAYS HOURS”
YEAR_MONTH 年和月 “YEARS-MONTHS”
HOUR_SECOND 小时, 分钟, “HOURS:MINUTES:SECONDS”
DAY_MINUTE 天, 小时, 分钟 “DAYS HOURS:MINUTES”
DAY_SECOND 天, 小时, 分钟, 秒 “DAYS HOURS:MINUTES:SECONDS”

常见的日期format参数如下:


































































































































%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位

常见的日期函数如下:






































































































































































































名称 调用示例 结果 描述
now() now() 2018-09-27 14:22:48 获得当前日期+时间(date + time)
sysdate() sysdate() 获得当前日期+时间(date + time)函数
current_timestamp 示例见下 获得当前时间戳函数
current_timestamp() 示例见下 获得当前时间戳函数
date_format(date,format) 示例见下 日期/时间转换为字符串
time_format(time,format) 示例见下 日期/时间转换为字符串
str_to_date(str, format) 示例见下 字符串转换为日期
to_days(date) 示例见下 (日期、天数)转换函数
from_days(days) 示例见下 (日期、天数)转换函数
time_to_sec(time) 示例见下 (时间、秒)转换函数
sec_to_time(seconds) 示例见下 (时间、秒)转换函数
makedate(year,dayofyear) 示例见下 拼凑日期
maketime(hour,minute,second) 示例见下 拼凑日期
unix_timestamp() 示例见下 MySQL (Unix 时间戳、日期)转换函数
unix_timestamp(date) 示例见下 MySQL (Unix 时间戳、日期)转换函数
from_unixtime(unix_timestamp) 示例见下 MySQL (Unix 时间戳、日期)转换函数
from_unixtime(unix_timestamp,format) 示例见下 MySQL (Unix 时间戳、日期)转换函数
date_add() 示例见下 为日期增加一个时间间隔
adddate() 示例见下 可以用 date_add() 来替代
addtime() 示例见下 可以用 date_add() 来替代
date_sub() 示例见下 为日期减去一个时间间隔
datediff(date1,date2) 示例见下 日期、时间相减函数
timediff(time1,time2) 示例见下 日期、时间相减函数
timestamp(date) 示例见下 date to timestamp
timestamp(dt,time) 示例见下 – dt + time
timestampadd(unit,interval,datetime_expr) 示例见下 时间戳加法
timestampdiff(unit,datetime_expr1,datetime_expr2) 示例见下 时间戳减法
convert_tz(dt,from_tz,to_tz) 示例见下 MySQL 时区(timezone)转换函数
  1. mysql> select now(); +---------------------+ | now() | +---------------------+ | 2018-09-27 14:22:48 | +---------------------+ 1 row in set

获得当前日期+时间(date + time)函数:sysdate()
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。sysdate() 日期时间函数,一般情况下很少用到。看下面的例子就明白了:

  1. mysql> select now(), sleep(3), now(); +---------------------+----------+---------------------+ | now() | sleep(3) | now() | +---------------------+----------+---------------------+ | 2018-09-27 14:26:19 | 0 | 2018-09-27 14:26:19 | +---------------------+----------+---------------------+ 1 row in set mysql> select sysdate(), sleep(3), sysdate(); +---------------------+----------+---------------------+ | sysdate() | sleep(3) | sysdate() | +---------------------+----------+---------------------+ | 2018-09-27 14:26:37 | 0 | 2018-09-27 14:26:40 | +---------------------+----------+---------------------+ 1 row in set
  2. mysql> select current_timestamp, current_timestamp(); +---------------------+---------------------+ | current_timestamp | current_timestamp() | +---------------------+---------------------+ | 2018-09-27 14:42:44 | 2018-09-27 14:42:44 | +---------------------+---------------------+ 1 row in set
  3. mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s'); +----------------------------------------------------+ | date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') | +----------------------------------------------------+ | 20080808222301 | +----------------------------------------------------+ 1 row in set mysql> select time_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s'); +----------------------------------------------------+ | time_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s') | +----------------------------------------------------+ | 00000000222301 | +----------------------------------------------------+ 1 row in set
  4. mysql> select str_to_date('08/09/2008', '%m/%d/%Y'); +---------------------------------------+ | str_to_date('08/09/2008', '%m/%d/%Y') | +---------------------------------------+ | 2008-08-09 | +---------------------------------------+ 1 row in set mysql> select str_to_date('08/09/08' , '%m/%d/%y'); +--------------------------------------+ | str_to_date('08/09/08' , '%m/%d/%y') | +--------------------------------------+ | 2008-08-09 | +--------------------------------------+ 1 row in set mysql> select str_to_date('08.09.2008', '%m.%d.%Y'); +---------------------------------------+ | str_to_date('08.09.2008', '%m.%d.%Y') | +---------------------------------------+ | 2008-08-09 | +---------------------------------------+ 1 row in set mysql> select str_to_date('08:09:30', '%h:%i:%s'); +-------------------------------------+ | str_to_date('08:09:30', '%h:%i:%s') | +-------------------------------------+ | 08:09:30 | +-------------------------------------+ 1 row in set mysql> select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); +---------------------------------------------------------+ | str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s') | +---------------------------------------------------------+ | 2008-08-09 08:09:30 | +---------------------------------------------------------+ 1 row in set
  5. mysql> select from_days(733627); +-------------------+ | from_days(733627) | +-------------------+ | 2008-08-08 | +-------------------+ 1 row in set mysql> select to_days('2008-08-08'); +-----------------------+ | to_days('2008-08-08') | +-----------------------+ | 733627 | +-----------------------+ 1 row in set
  6. mysql> select time_to_sec('01:00:00'); +-------------------------+ | time_to_sec('01:00:00') | +-------------------------+ | 3600 | +-------------------------+ 1 row in set mysql> select sec_to_time(3600); +-------------------+ | sec_to_time(3600) | +-------------------+ | 01:00:00 | +-------------------+ 1 row in set
  7. mysql> select makedate(2001,31); +-------------------+ | makedate(2001,31) | +-------------------+ | 2001-01-31 | +-------------------+ 1 row in set mysql> select makedate(2001,32); +-------------------+ | makedate(2001,32) | +-------------------+ | 2001-02-01 | +-------------------+ 1 row in set mysql> select maketime(12,15,30); +--------------------+ | maketime(12,15,30) | +--------------------+ | 12:15:30 | +--------------------+ 1 row in set
  8. mysql> select unix_timestamp(); +------------------+ | unix_timestamp() | +------------------+ | 1538032704 | +------------------+ 1 row in set mysql> select unix_timestamp('2008-08-08'); +------------------------------+ | unix_timestamp('2008-08-08') | +------------------------------+ | 1218124800 | +------------------------------+ 1 row in set mysql> select unix_timestamp('2008-08-08 12:30:00'); +---------------------------------------+ | unix_timestamp('2008-08-08 12:30:00') | +---------------------------------------+ | 1218169800 | +---------------------------------------+ 1 row in set mysql> select from_unixtime(1218290027); +---------------------------+ | from_unixtime(1218290027) | +---------------------------+ | 2008-08-09 21:53:47 | +---------------------------+ 1 row in set mysql> select from_unixtime(1218124800); +---------------------------+ | from_unixtime(1218124800) | +---------------------------+ | 2008-08-08 00:00:00 | +---------------------------+ 1 row in set mysql> select from_unixtime(1218169800); +---------------------------+ | from_unixtime(1218169800) | +---------------------------+ | 2008-08-08 12:30:00 | +---------------------------+ 1 row in set mysql> select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); +---------------------------------------------------+ | from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x') | +---------------------------------------------------+ | 2008 8th August 12:30:00 2008 | +---------------------------------------------------+ 1 row in set
  9. mysql> select @dt; +---------------------+ | @dt | +---------------------+ | 2018-09-27 15:28:15 | +---------------------+ 1 row in set mysql> select date_add(@dt, interval 1 day); +-------------------------------+ | date_add(@dt, interval 1 day) | +-------------------------------+ | 2018-09-28 15:28:15 | +-------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 hour); +--------------------------------+ | date_add(@dt, interval 1 hour) | +--------------------------------+ | 2018-09-27 16:28:15 | +--------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 minute); +----------------------------------+ | date_add(@dt, interval 1 minute) | +----------------------------------+ | 2018-09-27 15:29:15 | +----------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 second); +----------------------------------+ | date_add(@dt, interval 1 second) | +----------------------------------+ | 2018-09-27 15:28:16 | +----------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 microsecond); +---------------------------------------+ | date_add(@dt, interval 1 microsecond) | +---------------------------------------+ | 2018-09-27 15:28:15.000001 | +---------------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 week); +--------------------------------+ | date_add(@dt, interval 1 week) | +--------------------------------+ | 2018-10-04 15:28:15 | +--------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 month); +---------------------------------+ | date_add(@dt, interval 1 month) | +---------------------------------+ | 2018-10-27 15:28:15 | +---------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 quarter); +-----------------------------------+ | date_add(@dt, interval 1 quarter) | +-----------------------------------+ | 2018-12-27 15:28:15 | +-----------------------------------+ 1 row in set mysql> select date_add(@dt, interval 1 year); +--------------------------------+ | date_add(@dt, interval 1 year) | +--------------------------------+ | 2019-09-27 15:28:15 | +--------------------------------+ 1 row in set mysql> select date_add(@dt, interval -1 day); +--------------------------------+ | date_add(@dt, interval -1 day) | +--------------------------------+ | 2018-09-26 15:28:15 | +--------------------------------+ 1 row in set
  10. mysql> set @dt = '2008-08-09 12:12:33'; Query OK, 0 rows affected mysql> select date_add(@dt, interval '01:15:30' hour_second); +------------------------------------------------+ | date_add(@dt, interval '01:15:30' hour_second) | +------------------------------------------------+ | 2008-08-09 13:28:03 | +------------------------------------------------+ 1 row in set mysql> select date_add(@dt, interval '1 01:15:30' day_second); +-------------------------------------------------+ | date_add(@dt, interval '1 01:15:30' day_second) | +-------------------------------------------------+ | 2008-08-10 13:28:03 | +-------------------------------------------------+ 1 row in set
  11. mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second); +----------------------------------------------------------------+ | date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) | +----------------------------------------------------------------+ | 1997-12-30 22:58:59 | +----------------------------------------------------------------+ 1 row in set
  12. mysql> select datediff('2008-08-08', '2008-08-01'); +--------------------------------------+ | datediff('2008-08-08', '2008-08-01') | +--------------------------------------+ | 7 | +--------------------------------------+ 1 row in set mysql> select datediff('2008-08-01', '2008-08-08'); +--------------------------------------+ | datediff('2008-08-01', '2008-08-08') | +--------------------------------------+ | -7 | +--------------------------------------+ 1 row in set
  13. mysql> select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); +--------------------------------------------------------+ | timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00') | +--------------------------------------------------------+ | 08:08:08 | +--------------------------------------------------------+ 1 row in set -- 注意:timediff(time1,time2) 函数的两个参数类型必须相同。 mysql> select timediff('08:08:08', '00:00:00'); +----------------------------------+ | timediff('08:08:08', '00:00:00') | +----------------------------------+ | 08:08:08 | +----------------------------------+ 1 row in set
  14. mysql> select timestamp('2008-08-08'); +-------------------------+ | timestamp('2008-08-08') | +-------------------------+ | 2008-08-08 00:00:00 | +-------------------------+ 1 row in set mysql> select timestamp('2008-08-08 08:00:00', '01:01:01'); +----------------------------------------------+ | timestamp('2008-08-08 08:00:00', '01:01:01') | +----------------------------------------------+ | 2008-08-08 09:01:01 | +----------------------------------------------+ 1 row in set mysql> select timestamp('2008-08-08 08:00:00', '10 01:01:01'); +-------------------------------------------------+ | timestamp('2008-08-08 08:00:00', '10 01:01:01') | +-------------------------------------------------+ | 2008-08-18 09:01:01 | +-------------------------------------------------+ 1 row in set mysql> select timestampadd(day, 1, '2008-08-08 08:00:00'); +---------------------------------------------+ | timestampadd(day, 1, '2008-08-08 08:00:00') | +---------------------------------------------+ | 2008-08-09 08:00:00 | +---------------------------------------------+ 1 row in set mysql> select date_add('2008-08-08 08:00:00', interval 1 day); +-------------------------------------------------+ | date_add('2008-08-08 08:00:00', interval 1 day) | +-------------------------------------------------+ | 2008-08-09 08:00:00 | +-------------------------------------------------+ 1 row in set mysql> select timestampdiff(year,'2002-05-01','2001-01-01'); +-----------------------------------------------+ | timestampdiff(year,'2002-05-01','2001-01-01') | +-----------------------------------------------+ | -1 | +-----------------------------------------------+ 1 row in set mysql> select timestampdiff(day ,'2002-05-01','2001-01-01'); +-----------------------------------------------+ | timestampdiff(day ,'2002-05-01','2001-01-01') | +-----------------------------------------------+ | -485 | +-----------------------------------------------+ 1 row in set -- MySQL timestampadd() 函数类似于 date_add() mysql> select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); +-----------------------------------------------------------------+ | timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00') | +-----------------------------------------------------------------+ | -12 | +-----------------------------------------------------------------+ 1 row in set mysql> select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); +--------------------------------------------------------+ | datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00') | +--------------------------------------------------------+ | 7 | +--------------------------------------------------------+ 1 row in set
  15. mysql> select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); +-------------------------------------------------------+ | convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00') | +-------------------------------------------------------+ | 2008-08-08 04:00:00 | +-------------------------------------------------------+ 1 row in set
  16. -- 时区转换也可以通过 date_add, date_sub, timestampadd 来实现 mysql> select date_add('2008-08-08 12:00:00', interval -8 hour); +---------------------------------------------------+ | date_add('2008-08-08 12:00:00', interval -8 hour) | +---------------------------------------------------+ | 2008-08-08 04:00:00 | +---------------------------------------------------+ 1 row in set mysql> select date_sub('2008-08-08 12:00:00', interval 8 hour); +--------------------------------------------------+ | date_sub('2008-08-08 12:00:00', interval 8 hour) | +--------------------------------------------------+ | 2008-08-08 04:00:00 | +--------------------------------------------------+ 1 row in set mysql> select timestampadd(hour, -8, '2008-08-08 12:00:00'); +-----------------------------------------------+ | timestampadd(hour, -8, '2008-08-08 12:00:00') | +-----------------------------------------------+ | 2008-08-08 04:00:00 | +-----------------------------------------------+ 1 row in set

3.数值处理函数










































Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Sin() 返回一个角度的正弦
Tan() 返回一个角度的正切
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sqrt() 返回一个数的平方根

发表评论

表情:
评论列表 (有 0 条评论,316人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL数据处理函数

    函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数 一般是在数据上执行的,它给数据的转换和处理提供了方便。 **大多数SQL实现支持以下类型的函...