sql简单查询,过滤排序、单行函数

sql简单查询,过滤排序、单行函数
sql简单查询,过滤排序、单行函数

基本SQL select 语句

SQL:structural query language (结构化查询语言)

select * from employees;(查看所有,如果写错表明会出现什么情况?*是查询表中的所有列)

select id , name , email from employees;

注意:SQL 语言大小写不敏感SQL可以写在一行或多行;

关键字不能被缩写也不能被分行(select /from);

运算符:+ 、- 、* 、/

select 8 * 4 from dual(伪表);

练习:查询emp表中员工的no、领导编号、姓名、级别和年薪+1000

数字和日期何以使用算数运算符(标识为number是数字,标识为date的为日期)

Number类型的: select last_name , salary , 12 * salary + 1000 from employees; 区分优先级

Date 类型的: select sysdate(当天日期), sysdate + 1, sysdate + 2 from dual;(加减可以、乘除不可以)

练习:查询员工表中的first_name,last_name和领导编号*10的内容

练习:查询员工表中的first_name,last_name和领导编号+10的内容

空值: 空值不同于0, 凡是空值参与的运算,结果都为空(null)

别名: 1紧跟列明后面不加逗号(select employee_id id , last_name name , salary *12 annual from employees)

2 在列明后面加关键字as

3 别名默认显示都是大写的, 就想小写怎么办? 用”” (select employee_id “id” from employees)

连接符:把列与列连接, 列与字符连接在一起,用’||’表示, 可以用来合成列

在Java里有字符串参与的就像是‘+’

练习: 最后显示的结果是:aaa邓超的生日是01-1月-1965

练习: 查询顾客表中所有信息,别名分别是m_id , 姓名(拼接后),生日和电话号码

注意: Orcale 里的字符串用‘’只有在起别名的时候用到””

重复行:默认情况下,查询会返回全部行,包括重复行

select distinct (重复)department_id from empolyees;

二、过滤和排序数据

select employee_id, employee_name from employee where id > 20

查询生日为1965年1月1日出生的顾客信息

传统日期做法: select customer_id , first_name,last_name,phone from customers where dob='1-1月-1965'

运算符: = , > , >= , < , <= , <> !=

Is null

练习:生日是空的顾客信息

重点:其他比较运算符

1.between...and... (在两个值之间含边界)

查询工资大于3000小于10000的员工的名字

查询工资大于等于3000小于和等于10000的员工的姓名

select last_name from employees where between 3000 and 10000

select last_name from employees where salary >= 3000 and salary <= 10000

2.In 等于值列表中一个

查询工资为3000和10000的员工的姓名

1.select first_name||last_name from employees where salary=3000 or salary=10000

2.select first_name||last_name from employees where salary in(3000,10000)

3.select first_name||last_name from employees where salary =any(3000,10000)

4.select first_name||last_name from employees where salary = 3000

union select first_name||last_name from employees where salary = 10000

--顾客号是1和4的顾客的电话号码(4种方式)

Any:any是小于集合里任何一个,也就是比括号中任何一个小就满足了条件

select first_name||last_name from employees where salary

All:比所有的都小,比最小的都小,才满足条件

select first_name||last_name from employees where salary

3.Like 模糊查询

--名字中含有a的员工的信息

select * from employee where last_name like ‘%a%’

--带字母d的顾客的信息

使用order by 子句排序

Asc 升序默认升序

Desc 降序

Order子句在select语句末尾

查询领导编号为2的员工的信息并且按照工资降序

select first_name||last_name from employees where manager_id = 2 order by salary desc 查询顾客表中顾客的信息,fist_name 降序

第三节:单行函数

目标:

1.SQL中不用类型的函数

2.在select语句中使用字符、数字和转换函数

3.使用条件表达式

单行函数:一个记录一个结果

多行函数:多个记录一个结果比如分组函数

字符函数:大小写控制函数(lower小写upper大写initcap首字母大写)

select lower('EASYBORNJAVAEE009')from dual

select upper('easybornJAVAEE009')from dual

select initcap('easybornjavaee009')from dual

字符控制函数:

CONCAT (‘Hello’ , ‘World’) 结果: (‘HelloWorld’) 连接字符

查询员工表的信息名字用concat连接

SUBSTR(‘HelloWorld’ , 1 , 5) 结果: (‘Hello) 注意: 5是输出的个数

LENGTH(‘HelloWorld’) 结果: (10)

INSTR(‘HelloWorld’‘W’) 结果: (6) 首次出现的位置,如果没有返回0

LPAD(salary, 10 , ‘*’) 结果:(******2400) 左对齐固定位置对于工资来将使用lpad(‘’) select lpad(salary,5) from employees

RPAD(salary , 10 , ‘*’) 结果:(2400******) 右对齐固定位置

TRIM(‘H’ From ‘HelloWorld’) 结果:(‘elloWorld’) 将一个字符从另一个字符串中移除

问题:是移除首次还是都移除?仅仅将字符串中首尾的字符移除了

REPLACE (‘abcd’ , ‘b’ , ‘m’) 结果:(amcd) 将一个字符串中的字符给取代

问题:取代首次还是都取代?将所有的字符都取代

数字函数:

ROUND : 四舍五入

select round(435.452 , 2) , round(435.452) round(435.452 , -2)

TRUNC :截断后面不管是大于5还是小于5都要截断

MOD : 求余

重点: 转换函数

数据类型转换: 隐式和显示

隐式数据类型转换, Oracle会自动来完成下列转换

原数据类型目标数据类型

VARCHAR2 和CHAR NUMBER

VARCHAR2 和CHAR DATE

NUMBER VARCHAR2

DATE VARCHAR2

例如: select ‘12’ + 2 from dual

select sysdate + ‘2’ from dual

Select * from employees where id = ‘1’

显示转化: TO_DATE 、TO_CHAR 、TO_NUMBER

TO_DATE 和TO_CHAR之间的转化:

举例: 生日为1965年1月1日出生的顾客的信息

select concat(first_name,last_name),dob from customers where to_char(dob,'yyyy-mm-dd')='1965-01-01' select concat(first_name,last_name) from customers where to_date('1965-01-01','yyyy-mm-dd')=dob NUMBER和CHAR之间的转化:

select to_char (1234567.89 , ‘999,999,999.99’) from dual 用0也可以, 但是有一点区别

select to_char (1234567.89 , ‘$999,999,999.99’) from dual $这就是表示美元

select to_char (1234567.89 , ‘L999,999,999.99’) from dual L表示当地的、本地的货币符号

CHAR 转换成数字:

select to_number (222 , ‘999’)from dual 还可以运算呢

NVL函数

将一个空值转化为一个已知的值:

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

函数的一般形式有:

NVL(expr1 , expr2)

查询员工的信息注意manager_id 为空的赋默认值为0

练习:查询顾客信息,如果生日为空,默认值为1992年2月16日,电话号码为空的赋值为911 NVL2(expr1 , expr2 , expr3)

当expr1为null时, 返回expr3 , 当expr1 不为null时, 返回expr2

NULLIF(expr1 , expr2)

相等时返回null , 不相等时返回expr1

Decode(expr1,expr2,expr3,expr4)

当expr1为expr2时,返回expr3,否则返回expr4

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()

相关文档
最新文档