SQL单行函数

SQL单行函数
SQL单行函数

两种SQL 函数:

单行函数

多行函数

单行函数:

操作数句对象

接受函数返回一个结果

只对一行进行变换

每行返回一个结果

可以转换数据类型

可以嵌套

参数可以是一列或一个值

单行函数包括:

字符函数,数值函数,日期函数,转换函数,通用函数

字符函数:

大小写控制函数---->这类函数改变字符的大小写LOWER('SQL Course') sql course

UPPER('SQL Course') SQL COURSE INITCAP('SQL Course') Sql Course

eg:

SELECT employee_id, last_name, department_id FROM employees

WHERE LOWER(last_name) = 'higgins';

字符控制函数--->这类函数控制字符

CONCAT

SUBSTR

LENGTH

INSTR

LPAD | RPAD

TRIM

REPLACE

函数结果

CONCAT('Hello', 'World') HelloWorld

SUBSTR('HelloWorld',1,5) Hello

LENGTH('HelloWorld') 10

INSTR('HelloWorld', 'W') 6

LPAD(salary,10,'*') *****24000

RPAD(salary, 10, '*') 24000*****

TRIM('H' FROM 'HelloWorld') elloWorld

SQL> select empno,concat(ENAME,JOB) name,length(ENAME),instr(ENAME,'I') "CONTAIN

S 'I'?" FROM emp;

EMPNO NAME LENGTH(ENAME) CONTAINS 'I'?

---------- ------------------- ------------- -------------

7369 SMITHCLERK 5 3

7499 ALLENSALESMAN 5 0

7521 WARDSALESMAN 4 0

7566 JONESMANAGER 5 0

7654 MARTINSALESMAN 6 5 ......

......

SQL> SELECT lpad(sal,10,'*') from emp;

LPAD(SAL,10,'*')

--------------------

*******800

******1600

******1250

******2975

SQL> SELECT rpad(sal,10,'*') from emp;

RPAD(SAL,10,'*')

--------------------

800*******

1600******

1250******

2975******

1250******

2850******

replace :

SQL> select * from a;

MAPNUM

----------------------------

001#001

001#002

002#002

SQL> select replace (mapnum,substr(mapnum,4,1),null) from a;

REPLACE(MAPNUM,SUBSTR(MAPNUM,4,1),NULL)

---------------------------------------------------------------------

001001

001002

002002

数字函数:

ROUND: 四舍五入

ROUND(45.926, 2) 45.93

TRUNC: 截断

TRUNC(45.926, 2) 45.92

MOD: 求余

MOD(1600, 300) 100

ROUND 函数:

SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),

2 ROUND(45.923,-1)

3 FROM DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)

--------------- --------------- ----------------

45.92 46 50 DUAL 是一个‘伪表’,可以用来测试函数和表达式

SQL> SELECT ROUND(44.215,-1) from dual;

ROUND(44.215,-1)

----------------

40

SQL> SELECT ROUND(48.215,-1) from dual;

ROUND(48.215,-1)

----------------

50

SQL> SELECT ROUND(68.215,-1) from dual;

ROUND(68.215,-1)

----------------

70

TRUNC 函数:

SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),

2 TRUNC(45.923,-2)

3 FROM DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-2)

--------------- ------------- ----------------

45.92 45 0

SQL> SELECT TRUNC(445.923,-2) from dual;

TRUNC(445.923,-2)

-----------------

400

SQL> SELECT TRUNC(555.923,-2) from dual;

TRUNC(555.923,-2)

-----------------

500

MOD 函数:

SQL> SELECT empno,ename,sal,mod(sal,1000) from emp;

EMPNO ENAME SAL MOD(SAL,1000)

---------- ---------- ---------- -------------

7369 SMITH 800 800

7499 ALLEN 1600 600

7521 WARD 1250 250

7566 JONES 2975 975

7654 MARTIN 1250 250

7698 BLAKE 2850 850

7782 CLARK 2450 450

7788 SCOTT 3000 0

7839 KING 5000 0

7844 TURNER 1500 500

7876 ADAMS 1100 100

EMPNO ENAME SAL MOD(SAL,1000)

---------- ---------- ---------- -------------

7900 JAMES 950 950

7902 FORD 3000 0

7934 MILLER 1300 300

日期

Oracle 内部使用数字存储日期: 世纪,年,月,日,小时,分钟,秒。默认的日期格式是DD-MON-RR.

–可以只指定年的后两位在20世纪存放21世纪的日期。

–同样可以在21世纪存放20世纪的日期。

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

函数SYSDATE 返回:

日期

时间

日期的数学运算

在日期上加上或减去一个数字结果仍为日期。

两个日期相减返回日期之间相差的天数。

可以用数字除24来向日期中加上或减去小时。

SQL> select ename,(sysdate-HIREDATE)/7 as weeks from emp;

ENAME WEEKS

---------- ----------

SMITH 1494.36653

ALLEN 1485.08081

WARD 1484.7951

JONES 1479.22367

MARTIN 1453.65224

BLAKE 1475.08081

CLARK 1469.50938

SQL> select ename,(sysdate-HIREDATE)/365 as weeks from emp; ENAME WEEKS

---------- ----------

SMITH 28.659085

ALLEN 28.4810029

WARD 28.4755234

JONES 28.3686741

MARTIN 27.8782631

BLAKE 28.289222

CLARK 28.1823727

SCOTT 22.319359

日期函数:

MONTHS_BETWEEN 两个日期相差的月数

ADD_MONTHS 向指定日期中加上若干月数NEXT_DAY 指定日期的下一个日期(星期几)LAST_DAY 本月的最后一天

ROUND 日期四舍五入

TRUNC 日期截断

? MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')

19.6774194

? ADD_MONTHS ('11-JAN-94',6) '11-JUL-94'

? NEXT_DAY ('01-SEP-95','FRIDAY')

'08-SEP-95'

? LAST_DAY('01-FEB-95') '28-FEB-95'

? ROUND(SYSDATE,'MONTH') 01-AUG-95

? ROUND(SYSDATE ,'YEAR') 01-JAN-96

? TRUNC(SYSDATE ,'MONTH') 01-JUL-95

? TRUNC(SYSDATE ,'YEAR') 01-JAN-95

eg:

SQL> alter session set NLS_DATE_FORMAT='DD-MON-YY'; Session altered.

SQL> select sysdate from dual;

SYSDATE

------------

14-OCT-09

SQL> select months_between('14-OCT-09','14-OCT-08') from dual;

MONTHS_BETWEEN('14-OCT-09','14-OCT-08')

---------------------------------------

12

SQL> select add_months('14-OCT-09',6) from dual;

ADD_MONTHS('

------------

14-APR-10

SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA

--------------

31-10月-09

SQL> select next_day(sysdate,3) from dual;--〉下个周二

NEXT_DAY(SYSDA

--------------

27-10月-09

SQL> select next_day('2009-10-20',4) from dual;

NEXT_DAY('2

-----------

2009-10-21 ---〉指定的时间2009-10-20为周二,4代表周三,那下个周三就是21号

1-7:7代表周六,6代表周五,....2代表周一,1代表周日

SQL> SELECT SYSdate from dual;

SYSDATE

--------------

07-8月-09

SQL> select round(sysdate,'month') from dual;

ROUND(SYSDATE,

--------------

01-8月-09

SQL> select round(sysdate,'year') from dual;

ROUND(SYSDATE,

--------------

01-1月-10

SQL> select trunc(sysdate,'year') from dual;

TRUNC(SYSDATE,

--------------

01-1月-09

转换函数:

数据类型转换---〉隐性显性

隐式数据类型转换:

TO_CHAR 函数对日期的转换

TO_CHAR(date, 'format_model')

格式:

? 必须包含在单引号中而且大小写敏感。

? 可以包含任意的有效的日期格式。

? 可以使用fm 去掉多余的空格或者前导零。? 与日期指用逗号隔开。

eg:

TO_CHAR 函数对日期的转换

SQL> select ename,to_char(hiredate,'fmDD Month yyyy') from emp;----->fm可以去除0

ENAME TO_CHAR(HIREDA

---------- --------------

SMITH 17 12月1980

ALLEN 20 2月1981

WARD 22 2月1981

JONES 2 4月1981

TO_CHAR 函数对数字的转换

TO_CHAR(number, 'format_model')

下面是在TO_CHAR 函数中经常使用的几种格式:

9 数字

0 零

$ 美元符

L 本地货币符号

. 小数点

, 千位符

SQL> select to_char(sal,'$99,999.00') salary from emp;

SALARY

-----------

$800.00

$1,600.00

$1,250.00

$2,975.00

$1,250.00

$2,850.00

$2,450.00

$3,000.00

$5,000.00

$1,500.00

$1,100.00

嵌套函数

单行函数可以嵌套。

嵌套函数的执行顺序是由内到外。

通用函数:

这些函数适用于任何数据类型,同时也适用于空值:

NVL (expr1, expr2)

NVL2 (expr1, expr2, expr3)

NULLIF (expr1, expr2) 8

COALESCE (expr1, expr2, ..., exprn)

NVL 函数

将空值转换成一个已知的值:

可以使用的数据类型有日期、字符、数字。

函数的一般形式:

–NVL(commission_pct,0)

–NVL(hire_date,'01-JAN-97')

–NVL(job_id,'No Job Yet')

SQL> SELECT HIREDATE FROM EMP;

HIREDATE

------------

17-DEC-80

20-FEB-81

22-FEB-81

02-APR-81

...

SQL> SELECT ename,sal,nvl(COMM,0),nvl(HIREDATE,'17-DEC-80') from emp; ENAME SAL NVL(COMM,0) NVL(HIREDATE

---------- ---------- ----------- ------------

SMITH 800 0 17-DEC-80

ALLEN 1600 300 20-FEB-81

WARD 1250 500 22-FEB-81

JONES 2975 0 02-APR-81

MARTIN 1250 1400 28-SEP-81

BLAKE 2850 0 01-MAY-81

CLARK 2450 0 09-JUN-81

SCOTT 3000 0 19-APR-87

......

使用NVL2 函数:

SQL> select ename,comm,nvl2(comm,'sal+comm','sal') income from emp;

ENAME COMM INCOME

---------- ---------- --------

SMITH sal

ALLEN 300 sal+comm

WARD 500 sal+comm

JONES sal

MARTIN 1400 sal+comm

BLAKE sal

CLARK sal

SCOTT sal

KING sal

TURNER 0 sal+comm

ADAMS sal

.....

.....

使用NULLIF 函数:

返回类型

返回类型与第一个expression 相同。

如果两个表达式不相等,NULLIF 返回第一个expression 的值。如果相等,NULLIF 返回第一个expression 类型的空值。

SQL> select ename,length(ename) ,job,length(job),nullif(length(ename),length(job )) result from emp;

ENAME LENGTH(ENAME) JOB LENGTH(JOB) RESULT

---------- ------------- --------- ----------- ----------

SMITH 5 CLERK 5

ALLEN 5 SALESMAN 8 5

WARD 4 SALESMAN 8 4

JONES 5 MANAGER 7 5 MARTIN 6 SALESMAN 8 6

BLAKE 5 MANAGER 7 5

CLARK 5 MANAGER 7 5

SCOTT 5 ANALYST 7 5

KING 4 PRESIDENT 9 4

TURNER 6 SALESMAN 8 6

ADAMS 5 CLERK 5

ENAME LENGTH(ENAME) JOB LENGTH(JOB) RESULT

---------- ------------- --------- ----------- ----------

JAMES 5 CLERK 5

FORD 4 ANALYST 7 4

MILLER 6 CLERK 5 6

使用COALESCE 函数:

COALESCE 与NVL 相比的优点在于COALESCE 可以同时处理交替的多个值。如果第一个表达式费空,则返回这个表达式,对其他的参数进行COALESCE 。

SQL> select sal ,comm,deptno,empno,coalesce(sal,comm,deptno,empno) from emp;

SAL COMM DEPTNO EMPNO

COALESCE(SAL,COMM,DEPTNO,EMPNO)

---------- ---------- ---------- ---------- -------------------------------

20 7369

20

300 30 7499

300

...

...

条件表达式

在SQL 语句中使用IF-THEN-ELSE 逻辑。

使用两种方法:

–CASE 表达式

–DECODE 函数

CASE 表达式:

CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2

WHEN comparison_exprn THEN return_exprn

ELSE else_expr]

END

SQL> select ename,job,sal ,case job when 'CLERK' then 1.1*sal

2 when 'SALESMAN' then 1.2*sal

3 else sal end "re" from emp;

ENAME JOB SAL re

---------- --------- ---------- ----------

SMITH CLERK 800 880

ALLEN SALESMAN 1600 1920

WARD SALESMAN 1250 1500

JONES MANAGER 2975 2975 MARTIN SALESMAN 1250 1500

DECODE 函数:

DECODE(col|expression, search1, result1

[, search2, result2,...,]

[, default])

SQL> select ename,job,sal ,decode(job,'CLERK',1.1*sal, 2 'SALESMAN',1.2*sal,sal) re from emp;

ENAME JOB SAL RE ---------- --------- ---------- ----------

SMITH CLERK 800 880 ALLEN SALESMAN 1600 1920 WARD SALESMAN 1250 1500 JONES MANAGER 2975 2975 MARTIN SALESMAN 1250 1500 BLAKE MANAGER 2850 2850 CLARK MANAGER 2450 2450 SCOTT ANALYST 3000 3000 KING PRESIDENT 5000 5000 TURNER SALESMAN 1500 1800 ADAMS CLERK 1100 1210 ...

...

SQL练习

SQL练习 基本select语句: 1查询emp表的所有数据 2.查询emp表中ename,job,sal几列,其中sal列在结果集中以别名salary查询SQL>select ename,job,sal salary from emp; 3.查询emp表中deptno,ename,年工资,并将年工资命名别名total salary SQL>select deptno,ename,sal*12"total salary"from emp; 4.查看emp表的结构 5.查询emp表中雇员号,雇员的名字,工作岗位,入职日期,并将查询保存为脚本,脚本名字c.sql 6.运行c.sql 7.查询员工表中部门编号,重复的部门编号只查询一次 SQL>select distinct deptno from emp; 8.在结果集中雇员名和工作岗位相连用"空格逗号空格"分隔,并将列头查询为Employee and Title ???? 限制和排列数据 1.查询收入大于2850的雇员名称和工资 SQL>select ename,sal from emp where sal>2850; 2.查询雇员编号7566的雇员名字和所在部门号 SQL>select 2ename,deptno from emp where empno=7566; 3.查询BLAKE的工资 略 4.查询收入在2000和5000之间的人 SQL>select ename from emp where sal between2000and5000; 5.查询收入为1000,2000,3000,5000的人 SQL>select ename from emp where sal in(1000,2000,3000,5000);

SQL SERVER2008函数大全

SQL Server2008函数大全(完整版) SQL2008表达式:是常量、变量、列或函数等与运算符的任意组合。 一、字符串函数 函数名称参数示例说明 ascii(字符串表达式) select ascii('abc')返回97 说明:返回字符串中最左侧的字符的ASCII码。 char(整数表达式) select char(100)返回d 说明:把ASCII码转换为字符。 介于0和255之间的整数。如果该整数表达式不在此范围内,将返回 NULL值。 charindex(字符串表达式1,字符串表达式2[,整数表达式])instr select charindex('ab','BCabTabD')返回3 select charindex('ab','BCabTabD',4)返回6 说明:在字符串2中查找字符串1,如果存在返回第一个匹配的位置,如果不存在返回0。如果字符串1和字符串2中有一个是null则返回null。可以指定在字符串2中查找的起始位置。 patindex(字符串表达式1,字符串表达式2) select patindex('%ab%','123ab456')返回4 select patindex('ab%','123ab456')返回0 select patindex('___ab%','123ab456')返回1 select patindex('___ab_','123ab456')返回0 说明:在字符串表达式1中可以使用通配符,此字符串的第一个字符和最后一个字符通常是%。%表示任意多个字符,_表示任意字符返回字符串表达式2中字符串表达式1所指定模式第一次出现的起始位置。没有找到返回0。 difference(字符串表达式1,字符串表达式2) select difference('Green','Greene')返回4 返回一个0到4的整数值,指示两个字符表达式的之间的相似程度。 0表示几乎不同或完全不同, 4表示几乎相同或完全相同。 说明:注意相似并不代表相等 left(字符串表达式,整数表达式) select left('abcdefg',2)返回ab 说明:返回字符串中从左边开始指定个数的字符。

整理的SQL常用函数

create table test (id int, value varchar(10)) insertinto test values('1','aa') insertinto test values('1','bb') insertinto test values('2','aaa') insertinto test values('2','bbb') insertinto test values('2','ccc') insertinto test values('3','aa') insertinto test values('4','bb') select*from test select id, [values] =stuff((select','+ [values] from test t where id = test.id forxmlpath('')), 1 , 1 ,'') from test groupby id stuff(param1,startIndex,length, param2) 说明:将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。*/

COUNT()函数用于返回一个列内所有非空值的个数,这是一个整型值。 由于COUNT(*)函数会忽略NULL值,所以这个查询的结果是2。 三、SUM()函数 SUM()函数是最常用的聚合函数之一,它的功能很容易理解:和AVG()函数一样,它用于数值数据类型,返回一个列范围内所有非空值的总和。 四、CAST()函数 CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。 以下例子用于将文本字符串'123'转换为整型: SELECT CAST('123' AS int) 返回值是整型值123。 如果试图将一个代表小数的字符串转换为整型值,又会出现什么情况呢? SELECT CAST('123.4' AS int) CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作。由于123.4不能用int数据类型来表示,所以对这个函数调用将产生一个错误。 Server: Msg 245, Level 16, State 1, Line 1 Syntax error converting the varchar value '123.4' to a column of data type int. 在将varchar值'123.4' 转换成数据类型int时失败。 要返回一个合法的数值,就必须使用能处理这个值的数据类型。对于这个例子,存在多个可用的数据类型。如果通过CAST()函数将这个值转换为decimal类型,需要首先定义decimal 值的精度与小数位数。在本例中,精度与小数位数分别为9与2。精度是总的数字位数,包括小数点左边和右边位数的总和。而小数位数是小数点右边的位数。这表示本例能够支持的最大的整数值是9999999,而最小的小数是0.01。 SELECT CAST('123.4' AS decimal(9,2)) decimal数据类型在结果网格中将显示有效小数位:123.40 精度和小数位数的默认值分别是18与0。如果在decimal类型中不提供这两个值,SQL Server 将截断数字的小数部分,而不会产生错误。 SELECT CAST('123.4' AS decimal) 结果是一个整数值:123 五、CONVERT()函数 对于简单类型转换,CONVERT()函数和CAST()函数的功能相同,只是语法不同。 CAST()函数一般更容易使用,其功能也更简单。 CONVERT()函数的优点是可以格式化日期和数值,它需要两个参数:第1个是目标数据类型,第2个是源数据。 CONVERT()函数还具有一些改进的功能,它可以返回经过格式化的字符串值,且可以把日期值格式化成很多形式。有28种预定义的符合各种国际和特殊要求的日期与时间输出格式。 六、STR()函数 这是一个将数字转换为字符串的快捷函数。这个函数有3个参数:数值、总长度和小数位数。如果数字的整数位数和小数位数(要加上小数点占用的一个字符)的总和小于总长度,对结果中左边的字符将用空格填充。在下面第1个例子中,包括小数点在内一共是5个字符。结果

DB2_SQL常用函数

DB2函数大全 函数名函数解释函数举例 AVG() 返回一组数值的平均值. SELECTAVG(SALARY)FROMBSEMPMS; CORR(),CORRELATION() 返回一对数值的关系系数. SELECT CORRELATION(SALARY,BONUS)FROM BSEMPMS; COUNT() 返回一组行或值的个 数.SELECTCOUNT(*)FROMBSEMPMS; COVAR(),COVARIANCE() 返回一对数值的协方差. SELECTCOVAR(SALARY,BONUS)FROMBSEMPMS; MAX() 返回一组数值中的最大值. SELECTMAX(SALARY)FROMBSEMPMS; MIN() 返回一组数值中的最小值. SELECTMIN(SALARY)FROMBSEMPMS; STDDEV() 返回一组数值的标准偏差. SELECTSTDDEV(SALARY)FROMBSEMPMS; SUM() 返回一组数据的和. SELECTSUM(SALARY)FROMBSEMPMS; VAR(),VARIANCE() 返回一组数值的方差. SELECTVARIANCE(SALARY)FROMBSEMPMS; ABS(),ABSVAL() 返回参数的绝对值. SELECTABS(-3.4)FROMBSEMPMS; ACOS() 返回参数的反余弦值. SELECTACOS(0.9)FROMBSEMPMS; ASCII() 返回整数参数最左边的字符的ASCII码. SELECTASCII('R')FROMBSEMPMS; ASIN() 返回用弧度表示的角度的参数的反正弦函数. SELECTASIN(0.9)FROMBSEMPMS; ATAN() 返回参数的反正切值,该参数用弧度表示的角度的参数. SELECTATAN(0.9)FROMBSEMPMS; ATAN2() 返回用弧度表示的角度的X和Y坐标的反正切值. SELECTATAN2(0.5,0.9)FROMBSEMPMS;

SQL Server系统函数大全

sql server 系统函数大全 一、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。 2、CHAR() 将ASCII 码转换为字符。如果没有输入0 ~ 255之间的ASCII 码值,CHAR()返回NULL 。 3、LOWER()和UPPER() LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。 4、STR() 把数值型数据转换为字符型数据。 STR ([,length[,]]) length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10,decimal 缺省值为0。 当length 或者decimal 为负值时,返回NULL; 当length 小于小数点左边(包括符号位)的位数时,返回length 个*; 先服从length ,再取decimal ; 当返回的字符串位数小于length ,左边补足空格。 二、去空格函数 1、LTRIM() 把字符串头部的空格去掉。 2、RTRIM() 把字符串尾部的空格去掉。 三、取子串函数 1、left() LEFT () 返回character_expression 左起integer_expression 个字符。 2、RIGHT()

RIGHT () 返回character_expression 右起integer_expression 个字符。 3、SUBSTRING() SUBSTRING (,length) 返回从字符串左边第starting_ position 个字符起length个字符的部分。 四、字符串比较函数 1、CHARINDEX() 返回字符串中某个指定的子串出现的开始位置。 CHARINDEX (<’substring_expression’>,) 其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。 此函数不能用于TEXT 和IMAGE 数据类型。 2、PATINDEX() 返回字符串中某个指定的子串出现的开始位置。 PATINDEX (<’%substring_expression%’>,)其中子串表达式前后必须有百分号“%”否则返回值为0。 与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、VARCHAR 和TEXT 数据类型。 五、字符串操作函数 1、QUOTENAME() 返回被特定字符括起来的字符串。 QUOTENAME (<’character_expression’>[,quote_ character]) 其中 quote_ character 标明括字符串所用的字符,缺省值为“[]”。 2、REPLICATE() 返回一个重复character_expression 指定次数的字符串。 REPLICATE (character_expression integer_expression) 如果 integer_expression 值为负值,则返回NULL 。

sql常用函数instr()和substr()

在Oracle中 可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。 其语法为: instr(sourceString,destString,start,appearPosition). instr('源字符串' , '目标字符串' ,'开始位置','第几次出现') 其中sourceString代表源字符串; destString代表想聪源字符串中查找的子串; start代表查找的开始位置,该参数可选的,默认为1; appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1; 如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。 返回值为:查找到的字符串的位置。 对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:SQL> select instr('yuechaotianyuechao','ao') position from dual; POSITION ---------- 6 从第7个字符开始搜索 SQL> select instr('yuechaotianyuechao','ao', 7) position from dual; POSITION ---------- 17 从第1个字符开始,搜索第2次出现子串的位置 SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual; POSITION ---------- 17 注意:1。若‘起始位置’=0 时返回结果为0, 2。这里只有三个参数,意思是查找第一个要查找字符的位置(因为‘第几次出现’默认为1), 当‘起始位置’不大于要查找的第一个字符的位置时,返回的值都将是第一个字符的位置,如果‘起始位置’大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……(但是也是以第一个字符开始计数)

plsql常用函数

PLSQL常用函数 1)处理字符的函数 || CONCAT ---并置运算符。 格式∶CONCAT(STRING1, STRING2) 例:’ABC’|| ’DE’=’ABCDE’ CONCAT(‘ABC’,’DE’) =’ABCDE’ INSTR---搜索子串位置 格式∶INSTR(STRING , SET[ , 开始位置[ , 出现次数]]) 例∶ INSTR (‘this is a test’ , ‘i’ , 1,2)=6 LENGTH----计算串长 格式∶ LENGTH(string) LTRIM,RTRIM,TRIM -----左截断,右截断,左右截断。默认为删除空格。 格式∶ LTRIM(STRING[,‘SET’]) 例∶ LTRIM(‘***tes*t***’,’*’)=’tes*t***’ LOWER----将字符串转换为小写 格式∶LOWER(string) UPPER---将字符串转换为大写 格式∶UPPER(string) SUBSTR----提取子串。START为正数时从左开始、为负数时从右开始 格式∶ SUBSTR(STRING , START [ , COUNT]) 例∶ SUBSTR(‘WORDSTAR’ , 2 , 3)=’ ORD’ REPLACE---搜索指定字符串并替换 格式∶REPLACE(string , substring , replace_string) 例∶ REPLACE(‘this is a test’ , ‘this’ , ‘that an’)=’that an is a test’

2)处理数字的函数 ROUND---返回固定小数位数。 格式∶ROUND (value)value为数字 例∶ROUND (66.123,2)= 66.12 CELL---返回大于等于特定值的最小整数 格式∶CELL(value) 例∶ CELL(-10,9)= -10 3)处理日期 SYSDATE---系统时间。精确至秒 例:TO_CHAR(SYSDATE,'YYYY-MM-DD') 2011-05-11(返回日期) TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') 2011-05-11 11:05:15(返回日期+时间) 常用日期数据格式 Y或YY或YYY 年的最后一位,两位或三位Select to_char(sysdate,’YYY’) from dual; SYEAR或YEAR SYEAR使公元前的年份前加一负号Select to_char(sysdate,’SYEAR’) from dua l;-1112表示公元前111 2年 Q 季度,1~3月为第一季度Select to_char(sysdate,’Q’) from dual;2表示第二季度① MM 月份数Select to_char(sysdate,’MM’) from dual;12表示12月 RM 月份的罗马表示Select to_char(sysdate,’RM’) from dual;IV表示4月 Month 用9个字符长度表示的月份名Select to_char(sysdate,’Month’) from dual;May后跟6个空格表示5月 WW 当年第几周Select to_char(sysdate,’WW’) from dual;24表示2002年6月13日为第24周W 本月第几周Select to_char(sysdate,’W’) from dual;2002年10月1日为第1周 DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual;36 3 2002年1 2月2 9日为第363天 DD 当月第几天Select to_char(sysdate,’DD’) from dual;04 10月4日为第4天 D 周内第几天Select to_char(sysdate,’D’) from dual;5 2002年3月14日为星期一 DY 周内第几天缩写Select to_char(sysdate,’DY’) from dual;SUN 2002年3月24日为星期天

SQL日期函数大全

通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。 为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。 使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。 一个月的第一天 第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。 这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。 本周的星期一 这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

数据库常用函数

数据库常用函数

一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份和还原 备份:exp dsscount/sa@dsscount owner=dsscount file=C:\dsscount_data_backup\dsscount.dmp log=C:\dsscount_data_backup\outputa.log 还原:imp dsscount/sa@dsscount file=C:\dsscount_data_backup\dsscount.dmp full=y ignore=y log=C:\dsscount_data_backup\dsscount.log statistics=none 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) CREATE TABLE ceshi(id INT not null identity(1,1) PRIMARY KEY,NAME VARCHAR(50),age INT) id为主键,不为空,自增长 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围

Sql server 函数大全

Sql 2008 函数大全 SQL2008 表达式:就是常量、变量、列或函数等与运算符的任意组合。 1、字符串函数 函数名称参数示例说明 ascii(字符串表达式) select ascii('abc') 返回 97 返回字符串中最左侧的字符的ASCII 码。 char(整数表达式) select char(100) 返回 d 把ASCII 码转换为字符。 介于0 与 255 之间的整数。如果该整数表达式不在此范围内,将返回NULL 值。charindex(字符串表达式 1, 字符串表达式2[,整数表达式]) select charindex('ab','BCabTabD') 返回 3 select charindex('ab','BCabTabD', 4) 返回 6 在字符串2 中查找字符串 1,如果存在返回第一个匹配的位置,如果不存在返回0。如果字符串 1 与字符串 2 中有一个就是null 则返回 null。 可以指定在字符串2 中查找的起始位置。 difference(字符串表达式 1,字符串表达式 2) select difference('Green','Greene') 返回 4 返回一个0 到 4 的整数值,指示两个字符表达式的之间的相似程度。 0 表示几乎不同或完全不同, 4 表示几乎相同或完全相同。 注意相似并不代表相等 left(字符串表达式,整数表达式) select left('abcdefg',2) 返回 ab 返回字符串中从左边开始指定个数的字符。 //貌似下标从1开始? right(字符串表达式,整数表达式) select right('abcdefg',2) 返回 fg 返回字符串中从右边开始指定个数的字符。 len(字符串表达式) select len('abcdefg')返回 7 select len('abcdefg') 返回 7 返回指定字符串表达式的字符数,其中不包含尾随空格。 Oracle与mysql 里面就是 select length(‘aaa’); lower(字符串表达式) select lower('ABCDEF')返回 abcdef 返回大写字符数据转换为小写的字符表达式。 upper(字符串表达式) select upper('abcdef')返回 ABCDEF 返回小写字符数据转换为大写的字符表达式。

Oracle SQL练习题(2)

Oracle SQL练习题(2) 注:这些查询题目涵盖了各种单行函数的基本查询的技术,请大家认真做,做好了的查询语句之后,有兴趣的同学可以再创建相应的视图和存储过程。下面的查询练习题是基于Oracle 10g数据库中的scott用户下的表来进行练习的。 首先给出scott用户中各个表的表结构 第一:emp(员工信息表),如图1所示 emp表中各个字段的介绍如下: (1)empno:员工编号 (2)ename:员工姓名 (3)job:职位 (4)mgr:上级领导编号 (5)hiredate:雇佣日期 (6)sal:薪水 (7)comm:佣金 (8)deptno:部门编号 第二:dept(部门信息表),如图2所示 dept表中各个字段的介绍如下: (1)deptno:部门编号 (2)dname:部门名称 (3)loc:部门所在地 练习: 1.选择部门30中的所有员工? 2.列出所有办事员(CLERK)的姓名,编号和部门编号? 3.找出佣金高于薪金的员工?

4.找出佣金高于薪金的60%的员工? 5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料? 6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又 不是办事员但其薪金大于或等于2000的所有员工的详细资料? 7.找出收取佣金的员工的不同工作? 8.找出不收取佣金或收取的佣金低于100的员工? 9.找出各月倒数第3天受雇的所有员工? 10.找出早于12年前受雇的员工? 11.以首字母大写的方式显示所有员工的姓名? 12.显示正好为5个字符的员工的姓名? 13.显示不带有"R"的员工的姓名? 14.显示所有员工姓名的前三个字符? 15.显示所有员工的姓名,用a替换所有"A"? 16.显示满10年服务年限的员工的姓名和受雇日期? 17.显示员工的详细资料,按姓名排序? 18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面? 19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序? 20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将 最早年份的员工排在最前面? 21.显示在一个月为30天的情况所有员工的日薪金,忽略余数? 22.找出在(任何年份的)2月受聘的所有员工? 23.对于每个员工,显示其加入公司的天数? 24.显示姓名字段的任何位置包含"A"的所有员工的姓名? 25.以年月日的方式显示所有员工的服务年限? 26.列出各种工作职位的最低工资,且显示最低工资大于1500的记录 27.列出所有雇员的雇员名称、部门名称和工资 28.列出从事同一种工作但属于不同部门的雇员的员工信息 29.列出按年薪排序的所有雇员的年薪 30.列出至少有一个员工的所有部门 31.列出薪金比"SMITH"多的所有员工 32.列出薪金高于公司平均水平的所有员工 33.列出与“SCOTT”从事相同工作的所有员工 34.列出某些员工的姓名和薪金,条件是他们的薪金等于部门30中任何一个员工的薪金 35.列出所有员工的姓名及其直接上级的姓名 36.列出各个部门的MANAGER(经理)的最低薪金

SQL常用语句及函数方法

1、通常用到的字符串转日期格式 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 Select CONVERT(varchar(100), GETDATE(), 12): 060516 Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47

PLSQL函数

plsql常用方法 在SQLPLUS下,实现中-英字符集转换 alter session set nls_language='AMERICAN'; alter session set nls_language='SIMPLIFIED CHINESE'; 主要知识点: 一、有关表的操作 1)建表 create table test as select * from dept; --从已知表复制数据和结构 create table test as select * from dept where 1=2; --从已知表复制结构但不包括数据 2)插入数据: insert into test select * from dept; 二、运算符 算术运算符:+ - * / 可以在select 语句中使用 连接运算符:|| select deptno|| dname from dept; 比较运算符:> >= = != < <= like between is null in 逻辑运算符:not and or 集合运算符:intersect ,union,union all,minus 要求:对应集合的列数和数据类型相同 查询中不能包含long 列 列的标签是第一个集合的标签 使用order by时,必须使用位置序号,不能使用列名 例:集合运算符的使用: intersect ,union,union all,minus select * from emp intersect select * from emp where deptno=10 ; select * from emp minus select * from emp where deptno=10; select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行 select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复行三,常用ORACLE 函数 sysdate为系统日期dual为虚表 一)日期函数[重点掌握前四个日期函数] 1,add_months[返回日期加(减)指定月份后(前)的日期] select sysdate S1,add_months(sysdate,10) S2, add_months(sysdate,5) S3 from dual; 2,last_day [返回该月最后一天的日期] select last_day(sysdate) from dual; 3,months_between[返回日期之间的月份数] select sysdate S1, months_between('1-4月-04',sysdate) S2, months_between('1-4月-04','1-2月-04') S3 from dual 4,next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日 select sysdate S1,next_day(sysdate,1) S2, next_day(sysdate,'星期日') S3 FROM DUAL 5,round[舍入到最接近的日期](day:舍入到最接近的星期日) select sysdate S1,

单行函数英文测试题

Review Questions 1. You want to display each project’s start date as the day, week, number, and year. Which statement will give output like the following? Tuesday Week 23, 2008 A. SELECT proj_id, TO_CHAR(start_date, ‘DOW Week WOY YYYY’) FROM projects; B. SELECT proj_id, TO_CHAR(start_date,’Day’||’ Week’||’ WOY, YYYY’) FROM projects; C. SELECT proj_id, TO_CHAR(start_date, ‘Day” Week” WW, YYYY’) FROM projects; D. SELECT proj_id, TO_CHAR(start_date, ‘Day Week# , YYYY’) FROM projects; E. You can’t calcu late week numbers with Oracle. 2. What will the following statement return? SELECT last_name, first_name, start_date FROM employees WHERE hire_date < TRUNC(SYSDATE) – 5; A. Employees hired within the past five hours B. Employees hired within the past five days C. Employees hired more than five hours ago D. Employees hired more than five days ago 3. Which assertion about the following statements is most true? SELECT name, region_code||phone_number FROM customers; SELECT name, CONCAT(region_code,phone_number) FROM customers; A. If REGION_CODE is NULL, the first statement will not include that customer’s PHONE_NUMBER. B. If REGION_CODE is NULL, the second statement will not include that customer’s PHONE_NUMBER. C. Both statements will return the same data. D. The second statement will raise an error if REGION_CODE is NULL for any customer. 4. Which single-row function could you use to return a specific portion of a character string? A. INSTR B. SUBSTR

mssql常用函数

MS SQL 常用函数 一、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用…?括起来,但含其它字符的字符串必须用…?括起来使用,否则会出错。 2、CHAR() 将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR()返回NULL 。 3、LOWER()和UPPER() LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。 4、STR() 把数值型数据转换为字符型数据。 STR ([,length[,]]) length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10,decimal 缺省值为0。 当length 或者decimal 为负值时,返回NULL; 当length 小于小数点左边(包括符号位)的位数时,返回length 个*; 先服从length ,再取decimal ; 当返回的字符串位数小于length ,左边补足空格。 二、去空格函数 1、LTRIM() 把字符串头部的空格去掉。 2、RTRIM() 把字符串尾部的空格去掉。 三、取子串函数 1、left() LEFT () 返回character_expression左起integer_expression个字符。

2、RIGHT() RIGHT () 返回character_expression右起integer_expression个字符。 3、SUBSTRING() SUBSTRING (,length) 返回从字符串左边第starting_ position 个字符起length个字符的部分。 四、字符串比较函数 1、CHARINDEX() 返回字符串中某个指定的子串出现的开始位置。 CHARINDEX () 其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。 此函数不能用于TEXT 和IMAGE 数据类型。 2、PATINDEX() 返回字符串中某个指定的子串出现的开始位置。 PATINDEX ()其中子串表达式前后必须有百分号“%”否则返回值为0。 与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于 CHAR、VARCHAR 和TEXT 数据类型。 五、字符串操作函数 1、QUOTENAME() 返回被特定字符括起来的字符串。 QUOTENAME ([,quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。 2、REPLICATE()

相关文档
最新文档