本篇文章讲述SQL语句中单行函数,以供参考,如有错误或不当之处还望大神们告知。
SQL函数即数据库的内置函数,可以运用在SQL语句中实现特定的功能。SQL单行函数对于每一行数据进行计算后得到一行输出结果。SQL单行函数根据数据类型分为字符函数、数字函数、日期函数、转换函数,另外还有一些别的函数。——来自百度
字段 | 类型 | 长度 | 主键 | 可为空 |
---|---|---|---|---|
id | number | 6 | 是 | 否 |
t_string | varchar | 200 | 否 | 是 |
t_number | number | 20,10 | 否 | 是 |
st_date | date | - | 否 | 是 |
t_string2 | varchar | 200 | 否 | 是 |
大小写转换函数包括:
1. UPPER() , 将查询的字符串小写转换为大写 ;
2. LOWER() , 将查询的字符串大写转换为小写 ;
3. INITCAP() , 将查询的字符串首字母大写 ;
select id , upper(string)
from T_CHAR ;
select id , lower(string)
from T_CHAR ;
select id , initcap(string)
from T_CHAR ;
SQL中常用的字符控制函数有:
1. CONCAT(),字符串连接函数
2. SUBSTR(),字符串截取函数
3. LEANTH(),求字符串长度函数
4. LPAD(),左填充函数
5. RPAD(),右填充函数
6. TRIM(),字符移除函数
7. REPLACE(),字符替换函数
select id , concat(t_string , t_string2)
from T_CHAR
select id , substr(t_string , 1 , 2 ) ,substr(t_string2 , 1 , 4 )
from T_CHAR
select id , t_string , length(t_string) ,t_string2 ,length(t_string2)
from T_CHAR
select id , rpad(t_string,10,'*') ,lpad(t_string2,10,'#')
from T_CHAR
select id , trim('d' from t_string) ,trim('w' from t_string2 )
from T_CHAR ;
select id , replace(t_string , 'a' , '*') ,replace(t_string2 ,'o' ,'#' )
from T_CHAR ;
SQL中用于数字计算的数字函数有:
1. ROUND() ,四舍五入函数;
2. TRUNC() ,截取函数
3. MOD() ,求余函数
select id , round(t_number , 2)
from T_CHAR ;
select id , trunc(t_number , 4)
from T_CHAR ;
select id , mod(t_number , 10)
from T_CHAR ;
SQL中可以对日期进行粗略计算:
1. 可以将日期加上或者减去n天
2. 可以用两个日期相减得到相差天数
select t_date , t_date + 1 , t_date - 2
from T_CHAR ;
select t_date , sysdate , sysdate - t_date
from T_CHAR ;
SQL中提供了精确计算日期的函数:
1. MONTHS_BETWEEN() 计算两个日期相差的天数;
2. ADD_MONTHS() 往一个日期中加n月;
3. NEXT_DAY() 当前系统时间的下一星期n的时间
4. LAST_DAY() 日期中月的最后一天
5. ROUND() 对日期的四舍五入
6. TRUNC() 对日期的截取
select t_date , months_between(sysdate , t_date) , add_months(t_date , 2)
from T_CHAR ;
select t_date , next_day(t_date , '星期三' ) , last_day(t_date)
from T_CHAR ;
select t_date , round(t_date,'month') , trunc(t_date , 'day')
from T_CHAR ;
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' ;
select *
from T_CHAR
where to_date('2015年11月19日' , 'yyyy"年"mm"月"dd"日"') = t_date ;
注:日期格式说明表示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
select id , to_char(t_number , '999,999.999')
from T_CHAR ;
注:数字格式说明,用数字‘9’站位数字前有空位不补位,用数字‘0’站位前有空位时补‘0’; ‘$’放在最前表示美元,大写字母‘L’表示当地货币
select to_number('¥47.453','L999,999.999')
from dual ;
ORACLE中提供了适合所有数据类型的函数,包括空值。
select id , t_string , nvl(to_char(t_date , 'yyyy/mm/dd') ,'日期为空') , nvl(t_string2 ,'字符串为空') , nvl(to_char(t_number , '9999999'),'数字为空')
from T_CHAR ;
select id , t_string , nvl2(to_char(t_date , 'yyyy/mm/dd'),'有日期' ,'日期为空') , nvl2(t_string2 ,'有字符串' ,'字符串为空') , nvl2(to_char(t_number , '9999999'),'有数字','数字为空')
from T_CHAR ;
select id , t_string , t_string2 , nullif(length(t_string),length(t_string2))
from T_CHAR ;