前言
今天在启动服务的时候,发现select sum的时候返回了一个null,之前一直以为没有的话会返回0。所以查了一下,发现有几个函数可以判断空值,这样自己手动处理null为0就正常了。
所以顺便整理一下mysql的内置函数。
处理null值
这里的expr表达式可以是常量或者某些字段
- COALESCE(expression_1, expression_2, ...,expression_n)
在所有的表达式中返回值为第一个不是null的值 - IFNULL(expr1,expr2)
如果第一个表达式为NULL,返回第二个表达式,否则返回第一个 - NULLIF(expr1,expr2)
如果两个表达式相同,则返回NULL,否则返回expr1的值 - ISNULL(expr1)
如果expr1的值为null,返回1,否则返回0
字符串函数
- CANCAT(expr1,expr2)/CONCAT_WS(x, s1, s2, ...)
用于将所有参数表达式的值连接,如CONCAT(id, '->', name),会返回"1->User"类似的信息。concat_ws会使用第一个参数来连接其他字符。 - LTRIM(str)/RTRIM(str)/TRIM(str)
用于去除str中的空格,分别对应去除左、右、两端空格。
其中trim函数有更加强大的用法
可以指定删除字符的位置以及删除的字符,默认为BOTH和' '(空格)字符。TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
- LEFT(str,n)/RIGHT(str,n)
返回str字符串最左边/最右边n个长度的串 - SPACE(N)
返回N个字符的空格字符 - REPEAT(str,count)
返回str重复count次得到的新字符串 - ELT(N,str1,str2,str3,...)
根据N的值来确定返回哪个参数,比如N为1,则返回str1。如果N的值超过参数的个数,则返回NULL - FIELD(str,str1,str2,str3,...)
返回列表中和str相等的第一个值的索引,如果没有返回0。比如
l> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
+---------------------------------------------------------+
| FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
- FIND_IN_SET(needle,haystack)
haystack为一个由','分隔的字符串,needle是一个不包含','字符的字符串。函数返回haystack所有','间隔的子串中和needle相等的子串的位置,如果没有则返回0,如果两个参数任何一个为null,返回null
mysql> SELECT FIND_IN_SET('y','x,y,z');
+--------------------------+
| FIND_IN_SET('y','x,y,z') |
+--------------------------+
| 2 |
+--------------------------+
1 row in set
- MAKE_SET(bits,str1,str2,..)
返回一个用','间隔的字符串,中间的键值由函数的参数组成,具体的组成方式由bits决定,没一个比特位代表一个参数,如5换成2进制为101,表示取第一个和第三个参数。如果选取的参数中有null,则跳过。
时间函数
- 日期函数
- CURDATE(), CURRENT_DATE, CURRENT_DATE()
用于获取当前日期。格式为'YYYY-MM-DD',若+0则返回YYYYMMDD - UTC_DATE, UTC_DATE()
返回当前世界标准时间; 若+0则返回YYYYMMDD - UNIX_TIMESTAMP([date])
返回一个时间戳。
- CURDATE(), CURRENT_DATE, CURRENT_DATE()
- 时间函数
- CURTIME(), CURRENT_TIME, CURRENT_TIME()
用于获取当前时间, 格式为'HH:MM:SS' 若+0则返回 HHMMSS - UTC_TIME, UTC_TIME()
用于获取当前世界标准时间, 格式为同上
- CURTIME(), CURRENT_TIME, CURRENT_TIME()
- day相关函数
- LAST_DAY(date)
返回该月的最后一天对应的值。 如果参数是无效的,则返回NULL。 - DAY(date),DAYOFMONTH(date)
返回值1-31或者参数为0时返回0,可以与LASTDAY结合返回一个月的天数 - DAYOFWEEK(date)
返回值1-7 对应 星期天-星期六 - DAYOFYEAR(date)
返回值1-366
- LAST_DAY(date)
- 时间处理函数
- DATEDIFF(date_expr1,date_expr2)
返回相差的天数,有正负值的区别。如果需要换算成相差的周或者月,可以除以对应的换算进制再取整。 - TIMEDIFF(expr1,expr2)
返回两个TIME或DATETIME值之间的差值,但是两个参数的类型必须一致,否则会返回null,其中一个值为null,返回值也会是null - TIMESTAMPDIFF(unit,begin,end)
返回end-begin的值,单位为unit,unit可选的值有(MICROSECOND,SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,YEAR) - EXTRACT(unit FROM date)
用来截取时间中的某些单位之间的间隔,unit可取的值有(DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,MICROSECOND,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MONTH,QUARTER,SECOND,SECOND_MICROSECOND,WEEK,YEAR,YEAR_MONTH)
- DATEDIFF(date_expr1,date_expr2)
格式转换函数
- CONV(N,from_base,to_base)
函数用于转换进制,将N从from_bace进制转换为to_back进制,进制的范围为2-36。 - CAST(expr AS type)
函数可以将任何类型的值转换为具有指定类型的值。目标类型可以为(BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED)
网友评论