此篇文章是我在B站学习时所做的笔记,主要对 函数的基本概念和分类和常见的单行函数,sql语句部分为亲自动手演示过的,方便复习用。此篇文章仅供学习参考。
提示:以下是本篇文章正文内容,下面案例可供参考
--单行函数:每次取一条记录,作为函数的参数,得到这条记录对应的单个结果
SELECT NAME,LENGTH(NAME)
FROM A_CHENS;
--多行函数:一次性把多条记录当作参数输入给函数,得到多条记录对应的当个结果
SELECT MAX(CHENGJI)
FROM A_CJJ_4;
字符型函数 | 解释 |
---|---|
LOWER() | 将整个字符串转换为小写 |
UPPER() | 将整个字符串转换为大写 |
INITCAP() | 把每个单词收个字母变成大写 |
CONCAT() | 连接两个字符串 |
SUBSTR() | 截取子字符串(全角算2字符) |
LENGTH() | 返回字符串的长度(全角算1字符) |
INSTR() | 字符串中搜索字符位置(全角算1字符) |
LPAD() | 在左边添加字符 |
RPAD() | 在右边添加字符 |
TRIM() | 删除左边和右边字符串 |
REPLACE() | 替换子字符串 |
表A_CHENS 数据:
SELECT *
FROM A_CHENS;
SELECT *
FROM A_CHENS
WHERE LOWER(XMPY)='chenyi';
SELECT *
FROM A_CHENS
WHERE XMPY=UPPER('chener');
SELECT PASSWORD,XMPY
FROM A_CHENS
WHERE INITCAP(PASSWORD)='Chensi';
SELECT NAME||XMPY,CONCAT(NAME,XMPY)
FROM A_CHENS;
SELECT XMPY,SUBSTR(XMPY,1,2)
FROM A_CHENS;
SELECT XMPY,INSTR(XMPY,'U')
FROM A_CHENS;
SELECT PASSWORD,LPAD(PASSWORD,10,'$'),rPaD(PASSWORD,10,'*')
FROM A_CHENS;
SELECT PASSWORD,REPLACE(PASSWORD,'a','A')
FROM A_CHENS;
数字函数是对数字进行操作的函数,这类函数比较少,也比较简单。
只有三种:
SELECT ROUND(45.943,2) "小数点后两位",
ROUND(45.943,0) "个位",
ROUND(45.942,-1) "十位"
FROM SYS.dual;
SELECT TRUNC(45.943,2)"小教点后两位",
TRUNC(45.343, 0)"个位",
TRUNC(45.942,-1)"十位"
FROM sys.DUAL;
SELECT* FROM A_CJJ_4;
SELECT CHENGJI,PINGSHIFEN,MOD(CHENGJI+PINGSHIFEN,2)
FROM A_CJJ_4
WHERE PINGSHIFEN=80;
--查看系统时间
SELECT SYSDATE FROM SYS.DUAL
SELECT *
FROM A_CHENS
WHERE BIRTHDAY='20-7月-2001';
SELECT NAME,SYSDATE,BIRTHDAY,ROUND((SYSDATE-BIRTHDAY)/365,0) 生活年数
FROM A_CHENS;
函数 | 描述 |
---|---|
MONTHS_BETWEEN | 两日期相差多少月,返回两个日期间隔月数 |
ADD_MONTHS | 在一个日期上加或减若干月到新的日期,返回指定月数后的日期 |
NEXT_DAY | 取得从当前日期开始遇到的第一指定星期几的日期,返回下周某一天的日期 |
LAST_DAY | 计算指定日期所在月份的最后一天的日期,返回本月最后一天的日期 |
ROUND | 取得按年或月四舍五入得到的新日期,四舍五入后的期间第一天 |
TRUNC | 取得按年或月截取得到的新日期,返回日期所在期间的第一天 |
SELECT NAME,SYSDATE,BIRTHDAY,(SYSDATE-BIRTHDAY)/30 普通计算,months_between(SYSDATE,BIRTHDAY)精确计算
FROM A_CHENS;
SELECT NAME,SYSDATE,BIRTHDAY,BIRTHDAY+90 粗略的三个月,add_months(BIRTHDAY,3)精确日期
FROM A_CHENS;
select sysdate 当时日期,
next_day(sysdate,'星期一')下周星期一,
next_day(sysdate,'星期二')下周星期二,
next_day(sysdate,'星期三')下周星期三,
next_day(sysdate,'星期四')下周星期四,
next_day(sysdate,'星期五')下周星期五,
next_day(sysdate,'星期六')下周星期六,
next_day(sysdate,'星期日')下周星期日
from dual;
SELECT NAME,BIRTHDAY,LAST_DAY(BIRTHDAY)
FROM A_CHENS;
select sysdate 当时日期,
ROUND(sysdate)最近0点日期,
ROUND(sysdate,'day')最近星期日,
ROUND(sysdate,'month')最近月初,
ROUND(sysdate,'q')最近季出日期,
ROUND(sysdate,'year')最近年初日期
from dual;
在执行数据操作的时候,如果两个类型不同的数据进行计算,很可能会出错,所以要使用数据类型转换函数
注:尽管可以使用隐式数据类型转换,但是还是建议执行显式的数据类型转换,以确保SQL语句的可靠性。
1、在转换日期为字符串的时候,日期中的年,月,日,时,分,秒都需要相应的格式控制符来控制转换的显示格式
格式 | 解释 |
---|---|
YYYY,YYY,YY | 分别代表4位,3位,2位的数字年份 |
YEAR | 年的拼写 |
MM | 数字月 |
MONTH | 月份的全拼名称 |
MON | 月份的缩写 |
DD | 数字日 |
DAY | 星期的全拼 |
DY | 星期的缩写 |
2、与日期控制符相对应,时间也需要相应的格式控制符来描述。
否则默认是不显示时间的。即使包含了时间,日期格式控制符也比较简单
格式控制符 | 描述 |
---|---|
AM | 表示上午或下午 |
HH24,HH12 | 24小时制或12小时制 |
Ml | 分钟 |
SS | 秒钟 |
SP | 数字的拼写 |
TH | 数字的序数词 |
“特殊字符” | 在日期时间中加入特殊的字符 |
3、
时间格式作为日期的一部分
HH24:MI:SS AM | 15:45:32 PM |
---|
用双引号括起来以加字符串
DD “of” MONTH | 12 of OCTOBER |
---|
数值拼写
ddspth | fourteenth |
---|
--隐式转换
SELECT *
FROM A_CHENS
WHERE SAL='22';
格式
案例一:TO_CHAR把日期转换为字符
SELECT NAME,BIRTHDAY ,TO_CHAR(BIRTHDAY,'YYYY-MM-DD')
FROM A_CHENS
WHERE TO_CHAR(BIRTHDAY, 'YYYY-MM-DD' )= '2004-01-01';
SELECT SYSDATE,TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS AM DAY')
FROM SYS.DUAL;
--TO_CHAR,把数值转换为字符
--$有就显示格式,没有就不显示
--L有就显示该格式,没有强制显示该格式
SELECT SAL , To_CHAR (SAL, '$999,999.00' ) , To_CHAR(SAL,'L000,000.00')
FROM A_CHENS
WHERE NAME='陈一';
案例一:使用TO_NUMBER函数将字符转换为数字,字符的格式和模板的模式必须要一致
--TO_NUMBER把字符型的数据转换为数值,字符的格式和模板的模式必须要一致
SELECT TO_NUMBER('$800.00','$999,999.00')
FROM SYS.DUAL
--TO_DATE把字符型的数据转为日期型的数据
SELECT *
FROM A_CHENS
WHERE BIRTHDAY=TO_DATE('2004-1-1','YYYY-MM-DD');
如若侵权,请及时与我联系。
此篇文章仅供学习参考,禁止转载!