SQL 必备- ORACLE-SQSLSERVER-DB2时间函数及常见函数总结
SQLSERVER 篇:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | 一、时间函数 --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(任意表达式) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 六、常用系统内置 常用系统存储过程: 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<br>返回最后插入的标识值。这个变量很有用,当你插入一行数据时,想同时获得该行的的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<br>返回 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 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)) |
1 2 3 4 5 6 7 8 9 10 | 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 篇:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 一、当前时间拆分: 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篇:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | --获取当前日期: 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 |
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java线程池详解:高效并发编程的核心利器
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· dotnetty 新的篇章- 开源
· DotTrace系列:1. 理解四大经典的诊断类型(上)
· 【大数据高并发核心场景实战】 - 数据持久化之冷热分离
· 这5种规则引擎,真香!
· 如何用大语言模型提取任意文档中的知识点