灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2082回复:0

[SQL Server]常用的sql函数

楼主#
更多 发布于:2013-05-13 10:15

常用的sql函数
 
(把ename转换成小写,找第二个字母是a)
SQL> select ename from emp where
  2  lower(ename) like '_a%';
 
ENAME
----------
WARD
MARTIN
JAMES
(查询enamel中的第二个字母是不是a)
SQL> select ename from emp where ename like '_A%' or ename
  2  like '_a%';
 
ENAME
----------
WARD
MARTIN
JAMES
(转换成大写)
SQL> select upper(ename) from emp;
 
UPPER(ENAM
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
 
UPPER(ENAM
----------
JAMES
FORD
MILLER
 
已选择14行。
(截取字符串,从第二个字符开始,长度为四)
SQL> select substr(ename, 2,4) from emp;
 
SUBSTR(E
--------
MITH
LLEN
ARD
ONES
ARTI
LAKE
LARK
COTT
ING
URNE
DAMS
 
SUBSTR(E
--------
AMES
ORD
ILLE
 
已选择14行。
(从第二个字符开始,长度是3)
SQL> select substr(ename,2,3)from emp;
 
SUBSTR
------
MIT
LLE
ARD
ONE
ART
LAK
LAR
COT
ING
URN
DAM
 
SUBSTR
------
AME
ORD
ILL
 
已选择14行。
(找到asc是65 的那个字符)
SQL> select chr(65) from dual;
 
C
-
A
(A的ascii值是多少)
SQL> select ascii('A') from dual;
 
ASCII('A')
----------
        65
(四舍五入)
SQL> select round(23,78) from dual;
 
ROUND(23,78)
------------
          23
 
SQL> select round(23.678) from dual;
 
ROUND(23.678)
-------------
           24
(四舍五入小数点后保留两位)
SQL> select round(23.6790,2)from dual;
 
ROUND(23.6790,2)
----------------
           23.68
四舍五入到十位
SQL> select round(23.456,-1)from dual;
 
ROUND(23.456,-1)
----------------
              20
(改变格式,)
SQL> select to_char(sal,'$99,999.9999') from emp;
 
TO_CHAR(SAL,'
-------------
    $800.0000
  $1,600.0000
  $1,250.0000
  $2,975.0000
  $1,250.0000
  $2,850.0000
  $2,450.0000
  $3,000.0000
  $5,000.0000
  $1,500.0000
  $1,100.0000
 
TO_CHAR(SAL,'
-------------
    $950.0000
  $3,000.0000
  $1,300.0000
 
已选择14行。
(转成当地货币的形式)
SQL> select to_char(sal,'L99,999.9999') from emp;
 
TO_CHAR(SAL,'L99,999.9
----------------------
            ¥800.0000
          ¥1,600.0000
          ¥1,250.0000
          ¥2,975.0000
          ¥1,250.0000
          ¥2,850.0000
          ¥2,450.0000
          ¥3,000.0000
          ¥5,000.0000
          ¥1,500.0000
          ¥1,100.0000
 
TO_CHAR(SAL,'L99,999.9
----------------------
            ¥950.0000
          ¥3,000.0000
          ¥1,300.0000
 
已选择14行。
 
SQL> select to_char(sal,'L00000,0000') from emp;
 
TO_CHAR(SAL,'L00000,0
---------------------
         ¥00000,0800
         ¥00000,1600
         ¥00000,1250
         ¥00000,2975
         ¥00000,1250
         ¥00000,2850
         ¥00000,2450
         ¥00000,3000
         ¥00000,5000
         ¥00000,1500
         ¥00000,1100
 
TO_CHAR(SAL,'L00000,0
---------------------
         ¥00000,0950
         ¥00000,3000
         ¥00000,1300
 
已选择14行。
 
SQL> select hiredate from emp;
 
HIREDATE
--------------
17-12月-80
20-2月 -81
22-2月 -81
02-4月 -81
28-9月 -81
01-5月 -81
09-6月 -81
19-4月 -87
17-11月-81
08-9月 -81
23-5月 -87
 
HIREDATE
--------------
03-12月-81
03-12月-81
23-1月 -82
 
已选择14行。
(改变日期的显示格式:符合我们的习惯)
SQL> select to_char(hiredate,'YYYY-MM--DD HH:MI:SS') from dual;
select to_char(hiredate,'YYYY-MM--DD HH:MI:SS') from dual
               *
第 1 行出现错误:
ORA-00904: "HIREDATE": 标识符无效
 
 
SQL> select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;
 
TO_CHAR(HIREDATE,'Y
-------------------
1980-12-17 12:00:00
1981-02-20 12:00:00
1981-02-22 12:00:00
1981-04-02 12:00:00
1981-09-28 12:00:00
1981-05-01 12:00:00
1981-06-09 12:00:00
1987-04-19 12:00:00
1981-11-17 12:00:00
1981-09-08 12:00:00
1987-05-23 12:00:00
 
TO_CHAR(HIREDATE,'Y
-------------------
1981-12-03 12:00:00
1981-12-03 12:00:00
1982-01-23 12:00:00
 
已选择14行。
(改变系统时间的格式)
SQL> select to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual;
 
TO_CHAR(SYSDATE,'YY
-------------------
2013-05-07 07:44:13
(把系统格式改成24进制的)
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
 
TO_CHAR(SYSDATE,'YY
-------------------
2013-05-07 19:45:14
 
几个转换函数:
(先把日期转化成  一般格式,然后查询比这个日期入职早的员工)
SQL>select ename,hiredate from emp where hiredate >
to_date('1981-1-23 12:00:00','YYYY-MM-DD HH24::MI:SS');
 
(把薪水显示的格式转变)
SQL>select sal from emp where sal>to_number("$1,250.00','$9,999.99');
 
(查询全年的年薪)
SQL>select ename,sal*12 + conn from emp;
 
(对于奖金为0的员工的处理)
SQL>select  ename,sal*12+nvl(comm,0) from emp;
 
 
to_date 转换成日期形式:
 
SQL> select ename,hiredate from emp where hiredate>
  2  to_date('1981-2-20 12:34:33','YYYY-MM-DD HH24:MI:SS');
 
ENAME      HIREDATE
---------- --------------
WARD       22-2月 -81
JONES      02-4月 -81
MARTIN     28-9月 -81
BLAKE      01-5月 -81
CLARK      09-6月 -81
SCOTT      19-4月 -87
KING       17-11月-81
TURNER     08-9月 -81
ADAMS      23-5月 -87
JAMES      03-12月-81
FORD       03-12月-81
 
ENAME      HIREDATE
---------- --------------
MILLER     23-1月 -82
 
已选择12行。
 
to_number的应用:
 
SQL> select sal from emp where sal>to_number
  2  ('$1,250.00','$9,999.99');
 
       SAL
----------
      1600
      2975
      2850
      2450
      3000
      5000
      1500
      3000
      1300
 
已选择9行。
 
SQL> select ename,sal*12+comm from emp;
 
ENAME      SAL*12+COMM
---------- -----------
SMITH
ALLEN            19500
WARD             15500
JONES
MARTIN           16400
BLAKE
CLARK
SCOTT
KING
TURNER           18000
ADAMS
 
ENAME      SAL*12+COMM
---------- -----------
JAMES
FORD
MILLER
 
已选择14行。
 
对于空值的处理:
SQL> select ename,sal*12+nvl(comm,0)from emp;
 
ENAME      SAL*12+NVL(COMM,0)
---------- ------------------
SMITH                    9600
ALLEN                   19500
WARD                    15500
JONES                   35700
MARTIN                  16400
BLAKE                   34200
CLARK                   29400
SCOTT                   36000
KING                    60000
TURNER                  18000
ADAMS                   13200
 
ENAME      SAL*12+NVL(COMM,0)
---------- ------------------
JAMES                   11400
FORD                    36000
MILLER                  15600
 
已选择14行。
 
 
主函数:
 
(查询emp表中的薪水最高的人)
SQL>select max(sal) from emp;
 
(查询emp表总共有多少行)
SQL>select count(*) from emp;
 
求最大值:
SQL> select max(sal) from emp;
 
  MAX(SAL)
----------
      5000
 
求最小值
SQL> select min(sal) from emp;
 
  MIN(SAL)
----------
       800
 
求平均值
SQL> select avg(sal) from emp;
 
  AVG(SAL)
----------
2073.21429
 
先得到平均值,再转换成字符串形式:
SQL> select to_char(avg(sal),'9999999.99') from emp;
 
TO_CHAR(AVG
-----------
    2073.21
 
对平均值进行四舍五入保留两位处理:
SQL> select round(to_char(avg(sal),'999999.99'),2)from emp;
 
ROUND(TO_CHAR(AVG(SAL),'999999.99'),2)
--------------------------------------
                               2073.21
 
求和:
SQL> select sum(sal)from emp;
 
  SUM(SAL)
----------
     29025
 
SQL> select count(*) from emp;
 
  COUNT(*)
----------
        14
 
求有多少行:
SQL> select count(*) from emp where deptno = 10;
 
  COUNT(*)
----------
         3
查询有多少个姓名:
SQL> select count(ename) from emp;
 
COUNT(ENAME)
------------
          14
 
SQL> select count(distinct deptno) from emp;
 
COUNT(DISTINCTDEPTNO)
---------------------
                    3
 
 
分组函数:group by
(查询员工的姓名,薪水,部门号)
SQL>select ename,sal ,deptno from emp;
 
通过分组查一个部门中,平均工资
SQL>select avg(sal) from emp group by deptno;
 
通过对部门分组查询每一个部门的平均工资
SQL>select deptno,avg(sal) from emp group by deptno;
 
通过对部门和工作的分组,查询最高工资
SQL>select max(sal) from emp group by deptno ,job;
 
把部门和工作分组中最高的工资显示出来
SQL>select deptno ,job,max(sal) from emp group by deptno ,job;
 
查询所有员工中的最高工资
SQL>select max(sal) from emp;
 
对deptno分组,查询最高工资(注意:没有在select列表中出现的名称,不能出现在
主函数和 分组列表中)
SQL>select deptno,max(sal) from emp group by deptno;
 
Having()对分组进行限制:
 
where 是对单条语句进行过滤;Having()可以对分组语句进行过滤;
 
部门的平均工资大于2000的显示:
SQL>select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;
 
最基本的语句的执行顺序,先进行select查询,进行单条语句的过滤,
再进行分组,然后最分组后的进行过滤,再进行排序:
 
eg:对于工资大于1200的按部门进行分组,分组后的平均薪水大于1500,然后按降序进行排列:
SQL>select avg(sal) from emp where sal>1200 group by deptno having avg(sal) > 1500 order by avg(sal) desc;

喜欢0 评分0
游客

返回顶部