本篇文章讲述SQL语句中单行函数,以供参考

单行函数介绍

SQL函数即数据库的内置函数,可以运用在SQL语句中实现特定的功能。SQL单行函数对于每一行数据进行计算后得到一行输出结果。SQL单行函数根据数据类型分为字符函数、数字函数、日期函数、转换函数,另外还有一些别的函数。——来自百度

数据说明

  • 表结构

字段

类型

长度

主键

可为空

id

number

6



t_string

varchar

200



t_number

number

20,10



st_date

date

-



t_string2

varchar

200



- 初始数据

sql server 小写转大写 sql小写转大写函数_字符串

一、字符函数

大小写转换函数

大小写转换函数包括:
1. UPPER() , 将查询的字符串小写转换为大写 ;
2. LOWER() , 将查询的字符串大写转换为小写 ;
3. INITCAP() , 将查询的字符串首字母大写 ;

  • 将表中的id和t_string查询出来,并将string大写
select id , upper(string)
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_02

  • 将表中的id和t_string查询出来,并将string小写
select id , lower(string)
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_03

  • 将表中的id和t_string查询出来,并将string首字母大写
select id , initcap(string)
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_单行函数_04

字符控制函数

SQL中常用的字符控制函数有:
1. CONCAT(),字符串连接函数
2. SUBSTR(),字符串截取函数
3. LEANTH(),求字符串长度函数
4. LPAD(),左填充函数
5. RPAD(),右填充函数
6. TRIM(),字符移除函数
7. REPLACE(),字符替换函数

  • CONCAT():将T_CHAR表string 和 string2连接起来
select id , concat(t_string , t_string2)
from T_CHAR

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_05

  • SUBSTR():截取string 中的前2个字符和string2中的前4个字符 。
select id , substr(t_string , 1 , 2 ) ,substr(t_string2 , 1 , 4 )
from T_CHAR

查询结果:

sql server 小写转大写 sql小写转大写函数_字符串_06

  • LEANTH():求string和string2的字符串长度
select id , t_string , length(t_string) ,t_string2 ,length(t_string2)
from T_CHAR

运行结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_07

  • LPAD() ,RPAD(), 将string用‘*’填充,string2用‘#’填充,总长为10
select id , rpad(t_string,10,'*') ,lpad(t_string2,10,'#')
from T_CHAR

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_08

  • TRIM(),将string中的首位字母 ‘a’ 删除 ,string2中的首尾字母 ‘o’ 删除。
select id , trim('d' from t_string) ,trim('w' from t_string2 )
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_09

  • REPLACE() ,将string中的所有 ‘a’ 替换成‘*’ , string2中的所有‘o’替换成‘#’ 。
select id , replace(t_string , 'a' , '*') ,replace(t_string2 ,'o' ,'#' )
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_10

二、数字函数

SQL中用于数字计算的数字函数有:
1. ROUND() ,四舍五入函数;
2. TRUNC() ,截取函数
3. MOD() ,求余函数

  • ROUND() ,将T_CHAR表中的 t_number保留两位小数第三位四舍五入。
select id , round(t_number , 2) 
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_oracle_11

  • TRUNC() ,截取T_CHAR中的 t_number 保留小数点后四位,其余舍去。
select id , trunc(t_number , 4) 
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_oracle_12

  • MOD() ,将T_CHAR中的 t_number 取模10 。
select id , mod(t_number , 10) 
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_单行函数_13

三、日期函数

对日期进行粗略计算

SQL中可以对日期进行粗略计算:
1. 可以将日期加上或者减去n天
2. 可以用两个日期相减得到相差天数

  • 将T_CHAR中的 t_date加上一天,减去两天。
select t_date , t_date + 1 , t_date - 2
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_14

  • 计算t_date到系统时间的天数 。
select t_date , sysdate , sysdate - t_date 
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_oracle_15

对日期进行精确计算

SQL中提供了精确计算日期的函数:
1. MONTHS_BETWEEN() 计算两个日期相差的天数;
2. ADD_MONTHS() 往一个日期中加n月;
3. NEXT_DAY() 当前系统时间的下一星期n的时间
4. LAST_DAY() 日期中月的最后一天
5. ROUND() 对日期的四舍五入
6. TRUNC() 对日期的截取

  • 计算T_CHAR中的 t_date和系统时间相差的天数 , 并将t_date加2个月
select t_date , months_between(sysdate , t_date) , add_months(t_date , 2)
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_字符串_16

  • 计算T_CHAR中 t_date 下一个星期三的日期,并计算系统时间的t_date最后一天的日期
select t_date , next_day(t_date , '星期三' ) , last_day(t_date)
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_单行函数_17

  • 将T_CHAR中 t_date按月四舍五入,将t_date按日截取
select t_date , round(t_date,'month') , trunc(t_date , 'day')
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_单行函数_18

四、转换函数

SQL中可以进行两种数据类型的转换,即隐式转换和显示转换。

隐式数据类型转换

ORACLE数据库中会将 char或varchar2 与 date 和 number 之间进行相互转换。如前例中日期date可以和number进行加减运算,也可以将输入的varchar2类型存入date型的数据库中,称之为隐形转换。

显式数据类型转换

ORACLE数据库中也可以通过方法 to_char() , to_date() , to_number(),完成数据类型之间的转换。
- 查询T_CHAR表中日期为’2016年7月21日’ 的数据(日期转字符串)。

select * 
from T_CHAR 
where to_char(t_date , 'yyyy-mm-dd') = '2016-07-21' ;

查询结果:

sql server 小写转大写 sql小写转大写函数_oracle_19

  • 查询T_CHAR表中日期为’2015年11月19日’ 的数据(字符串转日期)。
select * 
from T_CHAR 
where to_date('2015年11月19日' , 'yyyy"年"mm"月"dd"日"') = t_date ;

查询结果:

sql server 小写转大写 sql小写转大写函数_字符串_20

注:日期格式说明表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年;
表示month的:mm 用2位数字表示月;mon 用简写形式 比如11月或者nov ;month 用全称 比如11月或者november;
表示day的:dd 表示当月第几天;ddd表示当年第几天;dy 当周第几天 简写 比如星期五或者fri;day当周第几天 全写比如星期五或者friday;
表示hour的:hh 2位数表示小时 12进制; hh24 2位数表示小时 24小时;
表示minute的:mi 2位数表示分钟;
表示second的:ss 2位数表示秒 60进制;
表示季度的:q 一位数 表示季度 (1-4);
另外还有ww 用来表示当年第几周 w用来表示当月第几周;
24小时制下的时间范围:00:00:00-23:59:59 ;
12小时制下的时间范围:1:00:00-12:59:59

  • 将T_CHAR中 t_number 转换为格式‘999,999.999’(数字转字符串)
select id , to_char(t_number , '999,999.999')
from T_CHAR  ;

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_21

注:数字格式说明,用数字‘9’站位数字前有空位不补位,用数字‘0’站位前有空位时补‘0’; ‘$’放在最前表示美元,大写字母‘L’表示当地货币

  • 将字符串’¥47.453’ 转换为数字(字符串转数字)
select to_number('¥47.453','L999,999.999') 
from dual ;

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_22

五、通用函数

ORACLE中提供了适合所有数据类型的函数,包括空值。

  1. NVL(A,B) ,能够将一个空值转换成已知的值,若A为空显示A,非空显示B;
  2. NVL2(A,B,C) , 若A非空显示B 为空显示C ;
  3. NULLIF(A,B), A,B相等时返回null,不等时返回A ;
  4. COALESCE(A,B,C…) ,A为空返回B,B为空返回C,以此类推。

修改数据库中数据以便演示通用函数:

sql server 小写转大写 sql小写转大写函数_oracle_23

  • 查询T_CHAR中所有数据,要求若t_date为空则显示‘日期为空’,若t_string2为空显示‘字符串为空’,若t_number为空则显示‘数字为空’ (NVL)。
select id , t_string , nvl(to_char(t_date , 'yyyy/mm/dd') ,'日期为空') , nvl(t_string2 ,'字符串为空') , nvl(to_char(t_number , '9999999'),'数字为空')
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_数据库_24

  • 查询T_CHAR中所有数据,要求若t_date为空则显示‘日期为空’否则显示‘有日期’,若t_string2为空显示‘字符串为空’否则显示‘有字符串’,若t_number为空则显示‘数字为空’ 否则显示‘有数字’(NVL2类似于if-else,或c语言中的三目运算符?:)。
select id , t_string , nvl2(to_char(t_date , 'yyyy/mm/dd'),'有日期' ,'日期为空') , nvl2(t_string2 ,'有字符串' ,'字符串为空') , nvl2(to_char(t_number , '9999999'),'有数字','数字为空')
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_sql server 小写转大写_25

  • 查询T_CHAR中t_string , t_string2的长度,并比较若长度相等显示‘null’ 否则显示t_string长度 ;
select id , t_string , t_string2 , nullif(length(t_string),length(t_string2))
from T_CHAR ;

查询结果:

sql server 小写转大写 sql小写转大写函数_单行函数_26