SQLSERVER 篇:
一、时间函数
--getdate 获取当前时间
select getdate()
--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月
select dateadd(MONTH,12,'2013-02-17 13:20:16') --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应的值)
--datediff 两个时间的差 (后面-前面=返回值)
select datediff(day,'2013-02-01','2013-02-18') --返回:17 (参数day可以改为 month,year等日期加相应的值)
--datepart 获取日期的某个部分整数
select DATEPART(month, '2013-2-17') --返回 2 (参数month可以改为 day,year等日期加相应的值)
--datename 获取指定部位的字符串
select datename(weekday, '2013-2-17') --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)
--day(), month(),year() 获取指定部位的字符串
select day('2013-2-15') --返回15
二、时间格式转换
select CONVERT(varchar, getdate(), 120 ) --返回 2013-02-17 13:37:54
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --返回 20130217133828
select CONVERT(varchar(12) , getdate(), 111 ) --返回 2013/02/17
select CONVERT(varchar(12) , getdate(), 112 ) --返回 20130217
select CONVERT(varchar(12) , getdate(), 102 ) --返回 2013.02.17
select CONVERT(varchar(12) , getdate(), 101 ) --返回 02/17/2013
select CONVERT(varchar(12) , getdate(), 103 ) --返回 17/02/2013
select CONVERT(varchar(12) , getdate(), 104 ) --返回 17.02.2013
select CONVERT(varchar(12) , getdate(), 105 ) --返回 17-02-2013
select CONVERT(varchar(12) , getdate(), 106 ) --返回 17 02 2013
select CONVERT(varchar(12) , getdate(), 107 ) --返回 02 17, 2013
select CONVERT(varchar(12) , getdate(), 108 ) --返回 13:42:50
select CONVERT(varchar(12) , getdate(), 109 ) --返回 02 17 2013
select CONVERT(varchar(12) , getdate(), 110 ) --返回 02-17-2013
select CONVERT(varchar(12) , getdate(), 113 ) --返回 17 02 2013 1
select CONVERT(varchar(12) , getdate(), 114 ) --返回 13:42:24:743
三、时间格式与其他格式转换
将int转换为时间:convert(datetime,left(DATEid,8),101)
将时间转换为int: year(CreateDate)*10000 + month(CreateDate)*100 + day(CreateDate)
将时间格式[2014-07-24 10:32:43.197]转换为int20140724:select cast(replace(convert(char(10),GETDATE(),120),'-','') as int)
SQLSERVER 函数篇: *************************************************************
一、字符函数
ascii(字符串表达式)
char(整数表达式)
charindex(字符串表达式 1, 字符串表达式2[,整数表达式])
difference(字符串表达式 1,字符串表达式 2)
left(字符串表达式,整数表达式)
right(字符串表达式,整数表达式)
len(字符串表达式)
lower(字符串表达式)
upper(字符串表达式)
ltrim(字符串表达式)
rtrim(字符串表达式)
patindex(字符串表达式 1,字符串表达式 2)
reverse(字符串表达式)
space(整数表达式)
str(float 型小数[,总长度[,小数点后保留的位数]])
stuff (字符串表达式 1,开始位置,长度,字符串表达式 2)
substring(字符串表达式,开始位置,长度)
replace(字符串表达式 1,字符串表达式 2,字符串表达式 3)
二、数学函数
abs(数值表达式)
cos(浮点表达式)
sin(浮点表达式)
cot(浮点表达式)
ceiling(数值表达式)
floor(数值表达式)
rand([整数表达式])
round(数值表达式[,长度[,操作方式]])
三、日期函数
dateadd(日期部分,数字,日期)
datediff(日期部分,开始日期,结束日期)
datename(日期部分,日期)
datepart(日期部分,日期)
day(日期) month (日期) year (日期)
四、转换函数
convert(数据类型[(长度)],表达式[,样式])
cast(表达式 as 数据类型[(长度)])
getdate()
五、系统和功能函数
select newid()
isnumeric(任意表达式)
isdate(任意表达式)
六、常用系统内置
常用系统存储过程:
exec sp_databases; --查看数据库
exec sp_tables; --查看表
exec sp_columns student;--查看列
exec sp_helpIndex student;--查看索引
exec sp_helpConstraint student;--约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
exec sp_rename student, stuInfo;--修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB;--更改数据库名称
exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
exec sp_helpdb;--数据库帮助,查询数据库信息
exec sp_helpdb master;
七、常用系统变量:
1、@@IDENTITY
返回最后插入的标识值。这个变量很有用,当你插入一行数据时,想同时获得该行的的ID(标示列),就可以用@@IDENTITY
示例:下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。
INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
2、@@ROWCOUNT
返回受上一语句影响的行数。
示例:下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。
UPDATE authors SET au_lname = 'Jones' WHERE au_id = '999-888-7777'
IF @@ROWCOUNT = 0
print 'Warning: No rows were updated'
3、@@CONNECTIONS
返回自上次启动 Microsoft SQL Server以来连接或试图连接的次数。
示例:下面的示例显示了到当前日期和时间为止试图登录的次数。
SELECT GETDATE() AS 'Date and Time', @@CONNECTIONS AS 'Login Attempts'
4、@@CPU_BUSY
返回自上次启动 Microsoft SQL Server以来 CPU 的工作时间,单位为毫秒(基于系统计时器的分辨率)。
示例:下面的示例显示了到当前日期和时间为止 SQL Server CPU 的活动
SELECT @@CPU_BUSY AS 'CPU ms', GETDATE() AS 'As of'
5、@@DATEFIRST
返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。
示例:下面的示例将每周第一天设为 5 (星期五),并假定当日是星期六。SELECT 语句返回 DATEFIRST 值和当日是此周的第几天。
SET DATEFIRST 5
SELECT @@DATEFIRST AS '1st Day', DATEPART(dw, GETDATE()) AS 'Today'
6、@@IO_BUSY
返回 Microsoft SQL Server自上次启动后用于执行输入和输出操作的时间,单位为毫秒(基于系统计时器的分辨率)。
示例:下面的示例显示 SQL Server 自启动到目前已用于执行输入/输出操作的毫秒数。
SELECT @@IO_BUSY AS 'IO ms', GETDATE() AS 'As of'
7、@@LANGID
返回当前所使用语言的本地语言标识符(ID)。
示例:下面的示例将当前会话的语言设置为意大利语 (Italian),然后用 @@LANGID 返回意大利语的 ID。
SET LANGUAGE 'Italian'
SELECT @@LANGID AS 'Language ID'
8、@@LANGUAGE
返回当前使用的语言名。
示例:下面的示例返回当前会话的语言。
SELECT @@LANGUAGE AS 'Language Name'
9、@@MAX_CONNECTIONS
返回 Microsoft SQL Server上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。
示例:下面的示例假定 SQL Server 尚未被重新配置更少的用户连接。
SELECT @@MAX_CONNECTIONS
10、@@PACK_RECEIVED
返回 Microsoft SQL Server自上次启动后从网络上读取的输入数据包数目。
示例 SELECT @@PACK_RECEIVED
11、@@PACK_SENT
返回 Microsoft SQL Server自上次启动后写到网络上的输出数据包数目。示例SELECT @@PACK_SENT
12、@@PACKET_ERRORS
返回自 SQL Server 上次启动后,在 Microsoft SQL Server连接上发生的网络数据包错误数。
示例SELECT @@PACKET_ERRORS
13、@@SERVERNAME
返回运行 Microsoft SQL Server的本地服务器名称。示例SELECT @@SERVERNAME
14、@@SERVICENAME
返回 Microsoft SQL Server正在其下运行的注册表键名。若当前实例为默认实例,则 @@SERVICENAME 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实例名。
示例SELECT @@SERVICENAME
15、@@SPID
返回当前用户进程的服务器进程标识符 (ID)。
示例:下面的示例返回当前用户进程的进程 ID、登录名和用户名。
SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name'
16、@@TIMETICKS
返回一刻度的微秒数。示例SELECT @@TIMETICKS
17、@@TOTAL_ERRORS
返回 Microsoft SQL Server自上次启动后,所遇到的磁盘读/写错误数。
示例:下面的示例显示了 SQL Server 到当前日期和时间为止所遇到的错误数。
SELECT @@TOTAL_ERRORS AS 'Errors', GETDATE() AS 'As of'
18、@@TOTAL_WRITE
返回 Microsoft SQL Server自上次启动后写入磁盘的次数。
示例:下面的示例显示了到当前日期和时间为止总的磁盘读写次数。
SELECT @@TOTAL_READ AS 'Reads', @@TOTAL_WRITE AS 'Writes', GETDATE() AS 'As of'
19、@@VERSION
返回 Microsoft SQL Server当前安装的日期、版本和处理器类型。
示例:下面的示例返回当前安装的日期、版本和处理器类型。SELECT @@VERSION
20、@@TOTAL_READ
返回 Microsoft SQL Server自上次启动后读取磁盘(不是读取高速缓存)的次数。
示例:下面的示例显示了到当前日期和时间为止的总的磁盘读写次数。
SELECT @@TOTAL_READ AS 'Reads', @@TOTAL_WRITE AS 'Writes', GETDATE() AS 'As of'
1.常规表的重建
if exists(select * from sys.objects where name='tmp' and type='U')
drop table tmp
else
create table tmp (
id int,
name varchar(20)
)
type='U'通常是用来防止,起名时和系统的对象同名。如果可以保证没有,可以不带。
2.临时表的重建
if (object_id('tempdb..#tmp') is not null)
drop table #tmp
else
create table #tmp(id int,name varchar(20))
SQL:将查询结果插入到另一个表的三种情况:
一:如果要插入目标表不存在:
select * into 目标表 from 表 where …
二:如果要插入目标表已经存在:
insert into 目的表 select * from 表 where 条件
若两表只是有部分(字段)相同,则
insert into b(col1,col2,col3,col4,…) select col1,col2,col3,col4,… from a where…
三:如果是跨数据库操作的话: 怎么把A数据库的atable表所查询的东西,全部插入到B 数据库的btable表中
select * into B.btable from A.atable where …
同样,如果是跨服务器的,也是可以的。
ORACLE 篇:
一、当前时间拆分:
select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月
select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日
select to_char(sysdate,'day') from dual;
select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时
select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分
select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual
二、当前时间自身计算:
当前时间减去 7 分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual
当前时间减去 7 小时的时间
select sysdate - interval '7' hour from dual
当前时间减去 7 天的时间
select sysdate - interval '7' day from dual
当前时间减去 7 月的时间
select sysdate,sysdate - interval '7' month from dual
当前时间减去 7 年的时间
select sysdate,sysdate - interval '7' year from dual
三、当前时间其他计算:
START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):
天: ROUND(TO_NUMBER(sysdate - START_DATE))
小时: ROUND(TO_NUMBER(sysdate - START_DATE) * 24)
分钟: ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60)
秒: ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60 * 60)
毫秒: ROUND(TO_NUMBER(sysdate - START_DATE) * 24 * 60 * 60 * 1000)
四、当前时间转换
时间转换为char:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;
char转换为时间:
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
ORACLE 函数篇: *************************************************************
一、字符函数
lower(char):将字符串转化为小写的格式。
upper(char):将字符串转化为大写的格式。
length(char):返回字符串的长度。
substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个
replace(char1, search_string, replace_string)
instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引,否则返回小于1;在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
二、数学函数
round(n,[m]) 该函数用于执行四舍五入
trunc(n,[m]) 该函数用于截取数字。
mod(m,n)取余函数
floor(n) 返回小于或是等于n的最大整数
ceil(n) 返回大于或是等于n的最小整数
abs(n) 返回数字n的绝对值
三、日期函数
sysdate 返回系统时间
add_months函数 可以得到某一时间之前或之后n个月的时间
last_day(d) 返回指定日期所在月份的最后一天
四、转换函数
to_date()函数
to_char()函数
五、系统和功能函数
1)terminal:当前会话客户所对应的终端的标示符,如计算机名
2)language: 语言
3)db_name: 当前数据库名称
4)nls_date_format: 当前会话客户所对应的日期格式
5)session_user: 当前会话客户所对应的数据库用户名
6)current_schema: 当前会话客户所对应的默认方案名
7)host: 返回数据库所在主机的名称
Oracle trunc()函数的用法
/**************日期********************/
1.select trunc(sysdate) from dual --2011-3-18 今天的日期为2011-3-18
2.select trunc(sysdate, 'mm') from dual --2011-3-1 返回当月第一天.
3.select trunc(sysdate,'yy') from dual --2011-1-1 返回当年第一天
4.select trunc(sysdate,'dd') from dual --2011-3-18 返回当前年月日
5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回当年第一天
6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 当前时间为14:41
8.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函数没有秒的精确
/***************数字********************/
/*
TRUNC(number,num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入
*/
9.select trunc(123.458) from dual --123
10.select trunc(123.458,0) from dual --123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual --120
13.select trunc(123.458,-4) from dual --0
14.select trunc(123.458,4) from dual --123.458
15.select trunc(123) from dual --123
16.select trunc(123,1) from dual --123
17.select trunc(123,-1) from dual --120
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired。解决办法:
第一步:select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.object_id;
第二步:select sid, serial#, username, oSUSEr, terminal,program ,action, prev_exec_start from v$session where sid = 1866;
第三步:alter system kill session '1866,27069'
select object_name,machine,s.sid,s.serial# from gv$locked_object l,dba_objects o,gv$session s
where l.object_id = o.object_id and l.session_id = s.sid;
DB2篇:
--获取当前日期: select current date from sysibm.sysdummy1;
values current date;
--获取当前日期 select current time from sysibm.sysdummy1;
values current time;
--获取当前时间戳 select current timestamp from sysibm.sysdummy1;
values current timestamp;
--要使当前时间或当前时间戳记调整到 GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:
values current time -current timezone;
values current timestamp -current timezone;
--获取当前年份 values year(current timestamp);
--获取当前月 values month(current timestamp);
--获取当前日 values day(current timestamp);
--获取当前时 values hour(current timestamp);
--获取分钟 values minute(current timestamp);
--获取秒 values second(current timestamp);
--获取毫秒 values microsecond(current timestamp);
--从时间戳记单独抽取出日期和时间
values date(current timestamp); 07/24/14
values VARCHAR_FORMAT(current TIMESTAMP,'yyyy-mm-dd');
values char(current date); 2014-07-24-10.46.51.978540
values time(current timestamp); 10:47:25
--执行日期和时间的计算
values current date+1 year;
values current date+3 years+2 months +15 days;
values current time +5 hours -3 minutes +10 seconds;
--计算两个日期之间的天数
values days(current date)- days(date('2010-02-20'));
--时间和日期换成字符串
values char(current date);
values char(current time);
--要将字符串转换成日期或时间值
values timestamp('2010-03-09-22.43.00.000000');
values timestamp('2010-03-09 22:44:36');
values date('2010-03-09');
values date('03/09/2010');
values time('22:45:27');
values time('22.45.27');
--计算两个时间戳记之间的时差:
--秒的小数部分为单位
values timestampdiff(1,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --秒为单位
values timestampdiff(2,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --分为单位
values timestampdiff(4,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --小时为单位
values timestampdiff(8,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --天为单位
values timestampdiff(16,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --周为单位
values timestampdiff(32,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --月为单位
values timestampdiff(64,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --季度为单位
values timestampdiff(128,char(current timestamp - timestamp('2010-01-01-00.00.00'))); --年为单位
values timestampdiff(256,char(current timestamp - timestamp('2010-01-01-00.00.00')));
将时间转换为int:CAST(TO_CHAR(IN_DATE,'YYYYMMDD') AS INT) AS DATEID
发表评论