美文网首页
SQL 函数

SQL 函数

作者: wpf_register | 来源:发表于2019-09-29 09:37 被阅读0次

    原文链接

    字符串函数

    ascii(str)
    返回字符串str的第一个字符的ascii值(str是空串时返回0)

    SELECT ASCII('2'); -- 50
    SELECT ASCII(2); -- 50
    SELECT ASCII('date'); -- 100
    

    bin(n) :把n转为二进制值并以字串返回conv(n,10,2)
    oct(n) :把n转为八进制值并以字串返回 conv(n,10,8)
    hex(n):把n转为十六进制并以字串返回 conv(n,10,16)

    SELECT BIN(12); -- 1100
    SELECT OCT(12);  -- 14
    SELECT HEX(255); -- FF
    

    char(n,…):返回由参数n,…对应的ascii代码字符组成的一个字串(参数是n,…是数字序列,null值被跳过)

    SELECT CHAR(77,121,83,81,76);
    

    concat(str1,str2,…)把参数连成一个长字符串并返回(任何参数是null时返回null)

    SELECT CONCAT('m','y','sql')
    

    length(str):返回字符串str的长度
    char_length(str):返回字符串str的长度(多字节)

    SELECT LENGTH('fuck'); -- 4
    SELECT CHAR_LENGTH('我们'); --2
    

    locate(substr,str)
    position(substr in str)
    返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)
    locate(substr,str,pos)
    返回字符串substr在字符串str的第pos个位置起第一次出现的位置(str不包含substr时返回0)

    SELECT LOCATE('我们','谁说我们没长大'); -- 3
    SELECT POSITION('我们' IN '谁说我们没长大'); -- 3
    SELECT LOCATE('bar','foobarbar',5); -- 7
    

    instr(str,substr)
    返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0)

    SELECT INSTR('foobarbar','bar'); -- 4
    SELECT INSTR('xbar','foobar'); -- 0
    

    lpad(str,len,padstr)
    用字符串padstr填补str左端直到字串长度为len并返回
    rpad(str,len,padstr)
    用字符串padstr填补str右端直到字串长度为len并返回

    SELECT LPAD('baby',8,'*'); -- ****babay
    SELECT RPAD('baby',8,'*'); -- baby**** 
    

    left(str,len)
    返回字符串str的左端len个字符
    right(str,len)
    返回字符串str的右端len个字符

    SELECT LEFT('foobarbar',5); -- fooba
    SELECT RIGHT('foobarbar',5); -- arbar
    

    substring(str,pos,len)
    substring(str form pos for len)
    mid(str,pos,len)
    返回字符串str的位置pos起len个字符
    substring(str,pos)
    substring(str from pos)
    返回字符串str的位置pos起的一个子串

    SELECT SUBSTRING('quadratically',5,6); -- ratica
    SELECT SUBSTRING('quadratically' FROM 5 FOR 6);  -- ratica
    SELECT MID('quadratically',5,6);     -- ratica
    
    SELECT SUBSTRING('quadratically' FROM 5); -- ratically
    SELECT SUBSTRING('quadratically',5); -- ratically
    

    substring_index(str,delim,count)
    返回从字符串str的第count个出现的分隔符delim之后的子串

    SELECT SUBSTRING_INDEX('www.fenghoo.net','.',1);  -- www
    SELECT SUBSTRING_INDEX('www.fenghoo.net','.',2);  -- www.fenghoo
    SELECT SUBSTRING_INDEX('www.fenghoo.net','.',-1);  -- net
    SELECT SUBSTRING_INDEX('www.fenghoo.net','.',-2); -- fenghoo.net
    
    SELECT SUBSTRING_INDEX('fenghoo@net','@',1); -- fenghoo
    SELECT SUBSTRING_INDEX('fenghoonet','e',2); -- fenghoon
    

    ltrim(str)
    返回删除了左空格的字符串str
    rtrim(str)
    返回删除了右空格的字符串str
    trim([[both | leading | trailing] [remstr] from] str)
    返回前缀或后缀remstr被删除了的字符串str(位置参数默认both,remstr默认值为空格)

    SELECT LTRIM('  barbar'); -- barbar
    SELECT RTRIM('barbar   '); -- barbar
    SELECT TRIM( BOTH 'x' FROM 'xxxbarxxx'); -- bar
    SELECT TRIM( TRAILING 'xyz' FROM 'barxxyz'); -- barx
    

    space(n)
    返回由n个空格字符组成的一个字符串

    SELECT SPACE(3); -- '   '
    

    replace(str,from_str,to_str)
    用字符串to_str替换字符串str中的子串from_str并返回
    insert(str,pos,len,newstr)
    把字符串str由位置pos起len个字符长的子串替换为字符串newstr并返回

    SELECT REPLACE('www.mySQL.com','mySQL','myPHP'); -- www.myPHP.com
    SELECT INSERT('mySQL',3,4,'PHP');  -- myPHP
    

    repeat(str,count)
    返回由count个字符串str连成的一个字符串(任何参数为null时
    返回null,count<=0时返回一个空字符串)

    SELECT REPEAT('mysql',3);  -- mysqlmysqlmysql
    

    reverse(str)
    颠倒字符串str的字符顺序并返回

    SELECT REVERSE('fuck'); -- kcuf
    

    elt(n,str1,str2,str3,…)
    返回第n个字符串(n小于1或大于参数个数返回null)
    field(str,str1,str2,str3,…)
    返回str等于其后的第n个字符串的序号(如果str没找到返回0)
    ind_in_set(str,strlist)
    返回str在字符串集strlist中的序号(任何参数是null则返回
    null,如果str没找到返回0,参数1包含","时工作异常)

    SELECT ELT(3,'str1','str2','str3'); -- str3
    SELECT FIELD('str3','str1','str2','str3'); -- 3
    SELECT FIND_IN_SET('b','a,b,c,d'); -- 2
    

    make_set(bits,str1,str2,…)
    把参数1的数字转为二进制,假如某个位置的二进制位等于1,对应位置的字串选入字串集并返回(null串不添加到结果中)

    SELECT MAKE_SET(1,'a','b','c');     -- a
    SELECT MAKE_SET(1 | 4,'hello','nice','world');  -- hello,world
    SELECT MAKE_SET(0,'a','b','c');  -- ''
    

    export_set(bits,on,off,[separator,[number_of_bits]])
    按bits排列字符串集,只有当位等于1时插入字串on,否则插入off
    separator默认值","
    number_of_bits参数使用时长度不足补0而过长截断

    SELECT EXPORT_SET(5,'fuck','NOT','-',4); -- fuck-NOT-fuck-NOT
    

    lcase(str) lower(str)
    返回小写的字符串str
    ucase(str) upper(str)
    返回大写的字符串str

    SELECT LCASE('FUCK'),LOWER('FACK'),UPPER('fuck'),UCASE('fuck');  -- fuck    fack    FUCK    FUCK
    

    数字函数

    abs(n) 返回绝对值
    sign(n) 返回参数的符号(1,0,-1)

    SELECT abs(-10),abs(12) ; -- 10 12
    SELECT SIGN(0),SIGN(12),SIGN(-12); -- 0 1  -1
    

    mod(n,m) 求模

    SELECT MOD(234,10);   -- 4
    SELECT 234%10 ;
    

    floor(n)
    返回不大于n的最大整数值
    ceiling(n)
    返回不小于n的最小整数值
    round(n,d)
    返回n的四舍五入值,保留d位小数(d的默认值为0)
    truncate(n,d)
    保留数字n的d位小数并返回

    SELECT FLOOR(1.23), FLOOR(-1.23); -- 1 -2
    SELECT CEILING(1.23),CEILING(-1.23); -- 2,-1
    SELECT ROUND(12,3);
    SELECT ROUND(12.345,2);   -- 12.35
    
    SELECT TRUNCATE(12.3456,3);  -- 12.345
    

    pow(x,y) power(x,y)
    返回值x的y次幂
    sqrt(n)
    返回非负数n的平方根
    pi()
    返回圆周率

    SELECT POW(2,10); -- 1024
    SELECT SQRT(16);   -- 4
    SELECT PI();    -- 3.141593
    

    rand() rand(n)
    返回在范围0到1.0内的随机浮点值(可以使用数字n作为初始值)
    order by rand() 随机查询取前几条记录

    SELECT RAND(),RAND(20);  -- 0.44084669504393514   0.15888261251047497
    

    least(x,y,…)
    返回最小值
    greatest(x,y,…)
    返回最大值

    SELECT LEAST(2,0);  -- 0
    SELECT LEAST(23.0,0.5,0,767.0);  -- 0
    SELECT LEAST('b','a','c'); -- a
    
    SELECT GREATEST(2,0);  -- 2
    SELECT GREATEST(23.0,0.5,0,767.0);  -- 767
    SELECT GREATEST('b','a','c'); -- c
    

    转换函数

    cast(expr AS type)
    convert(expr,type)
    更改相应字段数据类型

    SELECT CAST(a as unsigned) as b 
    FROM cardserver where order by b desc;
    
    SELECT CONVERT(a ,unsigned) as b
    FROM cardserver where order by b desc;
    

    日期函数

    1. dayofweek(date) :一周中的第几日(星期几)
      dayofmonth(date):一月中的第几日(在1到31范围内)
      dayofyear(date): 一年中的第几日(在1到366范围内)
      weekofyear():日期的日历星期数(在1到53范围内)
    SELECT DAYOFWEEK('2019-09-27');  -- 6 (1 = 星期天)
    SELECT DAYOFMONTH('2019-09-27');  -- 27
    SELECT DAYOFYEAR('2019-09-27');  -- 270
    
    1. week(date,first):返回date是一年的第几周
      month(date) :返回date中的月份数值
      quarter(date):返回date是一年的第几个季度
      year(date):返回date的年份(范围在1000到9999)
      hour(time):返回time的小时数(范围是0到23)
      minute(time):返回time的分钟数(范围是0到59)
      second(time):返回time的秒数(范围是0到59)
    (first默认值0,first取值1表示周一是周的开始,0从周日开始)
    SELECT WEEK('2019-09-27');  -- 38
    SELECT WEEK('2019-09-27',1);  -- 39
    
    SELECT MONTH('2019-09-27'); -- 9
    SELECT QUARTER('2019-09-27');       -- 3
    
    SELECT QUARTER('2019-10-27');       -- 4
    
    
    SELECT YEAR('2019-09-27');  -- 2019
    SELECT HOUR('10:05:03');  -- 10
    SELECT MINUTE('19-09-27 10:05:23');  -- 5
    SELECT SECOND('19-09-28 10:13:11');   -- 11
    
    1. date_add(date,interval expr type)
      date_sub(date,interval expr type) 
      adddate(date,interval expr type)
      subdate(date,interval expr type)
      对日期时间进行加减法运算
      expr对date进行加减法的一个表达式字符串
      type指明表达式expr应该如何被解释
    type值 含义 expr格式
    second second
    minute minute
    hour hour
    day day
    month month
    year year
    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
    SELECT '2019-09-27 15:44:23' + INTERVAL 1 SECOND ;  -- 2019-09-27 15:44:24
    SELECT '2019-09-27 15:44:23' - INTERVAL 1 DAY ;     -- 2019-09-267 15:44:24
    SELECT interval 1 day + '2019-09-27 15:44:23';  -- 2019-09-28 15:44:23
    
    SELECT DATE_ADD('2019-09-27 15:44:23',INTERVAL 1 YEAR); 2020-09-27 15:44:23
    SELECT DATE_ADD('2019-09-27 15:44:23',INTERVAL '1:1'  minute_second);   -- 2019-09-27 15:45:24
    SELECT DATE_SUB('1998-01-01 00:00:00',interval '11:1:1' day_second); -- 1997-12-31 22:58:59
    SELECT DATE_ADD('1998-01-01 00:00:00', interval '-110' day_hour); -- 1997-12-27 10:00:00
    SELECT DATE_SUB('1998-01-02',INTERVAL 31 DAY);  -- 1997-12-02
    
    SELECT DATE_ADD('1998-01-01 00:00:00', interval '-1 3' day_hour); -- 1997-12-30 21:00:00
    SELECT DATE_ADD('2019-09-28 14:23:32',INTERVAL '1:2:3' HOUR_SECOND);  -- 2019-09-28 15:25:35
    
    1. datediff(date1,date2) 函数返回两个日期之间的天数
    SELECT DATEDIFF('2008-12-30','2008-12-29'); -- 1
    SELECT DATEDIFF('2008-12-29','2008-12-30'); -- -1
    
    1. date_format(date,format)
      time_format(time,format)
      根据format字符串格式化date值,后者只处理时间

    %Y 四位数字表示的年份
    %y 两位数字表示的年份
    %m 两位数字表示的月份(01, 02, …, 12)
    %c 数字表示的月份(1, 2, …., 12)
    %d 两位数字表示月中的天数(00, 01,…, 31)
    %e 数字形式表示月中的天数(1, 2, …, 31)

    %H 两位数字形式的小时,24 小时(00,01, …, 23)
    %h 两位数字形式的小时,12 小时(01,02, …, 12)
    %k 数字形式的小时,24 小时(0,1, …, 23)
    %l 数字形式的小时,12 小时(1, 2, …, 12)
    %i/I 两位数字形式的分( 00,01, …, 59)
    %s/S 两位数字形式的秒( 00,01, …, 59)

    %T 24 小时的时间形式(hh:mm:ss)
    %r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
    %p AM或PM

    %W 一周中每一天的名称(Sunday, Monday, Saturday)
    %a 一周中每一天名称的缩写(Sun, Mon, …, Sat)
    %M 月名(January, February, …, December)
    %b 缩写的月名( Jan, Feb,…., Dec)
    %D 英文后缀表示月中的天数(1st, 2nd, 3rd,…)

    %w 以数字形式表示周中的天数( 0 = Sunday, 1=Monday, …, 6=Saturday)
    %j 以三位数字表示年中的天数( 001, 002, …, 366)
    %U 周(0, 1, 52),其中Sunday 为周中的第一天
    %u 周(0, 1, 52),其中Monday 为周中的第一天
    %% 字符%

    SELECT DATE_FORMAT('2019-02-12 12:32:41','%Y年%m月%d日 %H%i%s'); -- 2019年02月12日 123241
    SELECT TIME_FORMAT('2019-02-12 12:32:41','%Y年%m月%d日 %H%i%s');   -- 0000年00月00日 123241
    

    时间函数

    1. curdate() current_date()
      以’yyyy-mm-dd’或yyyymmdd格式返回当前日期值
      curtime() current_time()
      以’hh:mm:ss’或hhmmss格式返回当前时间值
      now() sysdate() current_timestamp()
      以’yyyy-mm-dd hh:mm:ss’或yyyymmddhhmmss格式返回当前日期
    SELECT CURDATE();   -- 2019-09-27
    SELECT CURRENT_DATE(); -- 2019-09-27
    SELECT CURTIME();   -- 15:37:04
    SELECT CURRENT_TIME(); -- 15:37:04
    
    SELECT CURDATE()+1; -- 20190928
    SELECT CURRENT_DATE()+2; -- 20190929
    SELECT CURTIME()+0; -- 154100
    SELECT CURRENT_TIME()+1; -- 154101
    
    SELECT NOW();   -- 2019-09-27 15:38:24
    SELECT NOW() + 0;       -- 20190927153848 
    
    1. timestampdiff(interval,datetime_expr1,datetime_expr2)
      返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。
      其结果的单位由interval 参数给

    TIMESTAMPADD(interval,int_expr,datetime_expr)
    将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中

    - FRAC_SECOND  表示间隔是毫秒
    - SECOND  秒
    -  MINUTE  分钟
    - HOUR  小时
    - DAY  天
    - WEEK  星期
    - MONTH  月
    - QUARTER  季度
    - YEAR  年
    
    SELECT TIMESTAMPDIFF(day,'2012-08-24','2012-08-30');   -- 6
    SELECT TIMESTAMPDIFF(MINUTE,'2012-08-24 09:00:00','2012-08-30 12:00:00'); -- 8820
    
    SELECT TIMESTAMPADD(MINUTE,20,'2012-08-24 09:00:00');  -- 2012-08-24 09:20:00
    

    相关文章

      网友评论

          本文标题:SQL 函数

          本文链接:https://www.haomeiwen.com/subject/kshnuctx.html