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_time
和 start_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 Query 获取系统型号(产品名称如:Proliant DL580 Gen9)?
SQL Server:如何从 VIEW 中获取序列的 NEXTVAL?