SQL如何获取系统时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何获取系统时间相关的知识,希望对你有一定的参考价值。

例如:表pats_in_hospital,里面是有病人的出生日期birth_of_date,获取系统当前年月日,还要注意判断当前是不是过了病人的生日,若是过了,病人年龄应该是当前年-出生年+1=病人年龄,若没过,那就直接相减就是病人年龄age。谢谢诶

SQL如何获取系统时间
sql读取系统日期和时间的方法如下:
--获取当前日期(如:yyyymmdd)

select CONVERT (nvarchar(12),GETDATE(),112)

--获取当前日期(如:yyyymmdd hh:MM:ss)
select GETDATE()

--获取当前日期(如:yyyy-mm-dd)
参考技术A getdate()
相关函数
SELECT GETDATE(),YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()),DATEDIFF(YEAR,'2000-08-14',GETDATE()),
DATEPART(YEAR,GETDATE());
参考技术B select case when getdate()<birth_of_date then partdate(getdate(),'yyyy')-partdate(birth_of_date,'yyyy') else partdate(getdate(),'yyyy')-partdate(birth_of_date,'yyyy')+1
end age from pats_in_hospital 没测试,用到一个partdate函数,截取日期年
参考技术C getdate()函数;,如果是sqlserver,那么有year()函数取出年份,其余自己解决。 参考技术D T-SQL:
select
case when month(getdate()) > month(birth_of_date) or (month(getdate()) = month(birth_of_date) and day(getdate()) > day(birth_of_date)) then datediff(year, birth_of_date, getdate()) + 1 else datediff(year, birth_of_date, getdate()) end as age
from pats_in_hospital本回答被提问者采纳
第5个回答  2017-08-17 select
case when to_char(sysdate,'mm-dd')<to_char(birth_of_date,'mm-dd') then to_number(substr(to_char(sysdate,'yyyy.mm.dd'),1,4))-to_number(substr(to_char(birth_of_date,'yyyy.mm.dd'),1,4))
when to_char(sysdate,'mm-dd')>=to_char(birth_of_date,'mm-dd') then to_number(substr(to_char(sysdate,'yyyy.mm.dd'),1,4))-to_number(substr(to_char(birth_of_date,'yyyy.mm.dd'),1,4))+1
else 0 end age
from pats_in_hospital
oracle中获取系统时间:sysdate

PL/SQL:如何运行存储在表列中的sql语句来获取sql语句的执行时间?

【中文标题】PL/SQL:如何运行存储在表列中的sql语句来获取sql语句的执行时间?【英文标题】:PL/SQL : How to run the sql statements stored within a column of the table to get the execution time of the sql statement? 【发布时间】:2014-04-27 11:47:15 【问题描述】:

我在编写我的 pl sql 脚本时遇到了一些困难。这是场景:

我的表 A 有 2 列,即第 1 列(varchar),第 2 列(varchar),如下所示。

Table A

       Column 1              Column 2
Row 1   a               select * from table_one
Row 2   b               select * from table_two 
Row 3   c               select * from table_three

我创建了一个包:pg_creating_package,其中包含一个主函数func_loop,它最终将循环在表的每一行中,并一一执行存储在第2列中的每个sql,并将所花费的时间插入到最终表B中示例:

Table B

              Start time               End time       Time Taken
Row 1   27/04/2014 12:33:44   27/04/2014 12:35:44       2mins  
Row 2   27/04/2014 12:33:44   27/04/2014 12:33:45       1sec

等等……

我的问题是: 1. 我将如何运行存储在该列中的 sql 语句? 2. 如何获取sql语句的开始时间? 3. 如何获取sql语句的结束时间?

【问题讨论】:

【参考方案1】:

您可以使用 EXECUTE IMMEDIATE 'your select statement'DBMS_SQL.EXECUTE 。 要记录执行时间,请获取EXECUTE IMMEDIATE 之前和之后的时间。

DECLARE   
start_time TIMESTAMP;  
end_time TIMESTAMP;  
BEGIN  
 ....
 start_time := SYSTIMESTAMP;  
 EXECUTE IMMEDIATE '....';  
 end_time := SYSTIMESTAMP;  
 .....  
END;

您可能希望使用DBMS_UTILITY.GET_TIME 代替日期时间/时间戳。

【讨论】:

谢谢.. 我已经尝试了您的建议,但收到以下错误:PLS-00382 事实上我的函数 func_loop 正在返回 NUMBER。但我认为以下语句返回类型 DATE。 diff_time := mod(trunc(24 * 60 * (end_time - start_time)), 60); diff_time 是 end_time 和 start_time 之间的差异你知道如何进行吗? end_timestart_time 的类型是什么? trucn 不适用于 TIMESTAMP,仅适用于 DATE。投射到日期,或使用dbms_utility.get_time,这更精确,尤其是在小间隔时。 end_time 和 start_time 是数字类型。 start_date 和 end_date 是 date 类型,因为我希望显示日期本身。 diff_time 是从 start_time 到 end_time 的时间。开始日期:= SYSTIMESTAMP;开始时间:= DBMS_UTILITY.get_time;立即执行“.....”;结束日期:= SYSTIMESTAMP; end_time := DBMS_UTILITY.get_time; diff_time := round( (end_time - start_time) / 100, 2);还是不行!

以上是关于SQL如何获取系统时间的主要内容,如果未能解决你的问题,请参考以下文章

sql如何取得当前日期

用sql语句如何获取当前时间,如何通过写sql语句改变数据库中的值如何通过写sql语句把数据从数据中提取出来

如何使用 SQL Query 获取系统型号(产品名称如:Proliant DL580 Gen9)?

SQL Server:如何从 VIEW 中获取序列的 NEXTVAL?

如何从 TRANSACTION LOG BACKUP FILE 中获取 SQL 语句? [关闭]

sql如何提取当前时间的函数