gpt4 book ai didi

sql - 优化 SQL 查询并动态使用当前日期

转载 作者:行者123 更新时间:2023-12-01 12:49:27 26 4
gpt4 key购买 nike

我正在尝试优化一个简单的 SQL 查询,想知道是否有人有任何建议。我正在 Oracle 11g 数据库上使用 Oracle SQL Developer(我不喜欢)进行开发。我正在使用的查询是:

SELECT count(*) 
FROM my_table
WHERE my_date
BETWEEN TO_DATE('2012-5-09T05.00.00','YYYY-MM-DD"T"HH24:MI:SS')
AND TO_DATE('2012-5-10T04.59.59','YYYY-MM-DD"T"HH24:MI:SS')
AND my_code='33'
GROUP BY my_code;

此外,我希望能够通过将日期的一部分更改为当前日期来动态地使用此查询,但我希望能够指定小时。所以我想比较类似的东西:

getdate() + 'T05.00.00'

我不知道该怎么做,而且 getdate() 函数在 SQL Developer 中似乎不起作用/我不知道如何正确使用它。

因此,我要寻找的是关于如何动态更改日期的日-月-年部分的优化建议和指示,我想将结果限制在该部分。谢谢!

最佳答案

要获取当前日期,您可以使用 SYSDATE。要向其添加 x 小时数,您可以添加 x/24。所以像这样:

示例:获取当前日期 + 5 小时

 SELECT SYSDATE + 5/24 FROM dual

所以在你的例子中:

SELECT count(*) 
FROM my_table
WHERE my_date
BETWEEN sysdate
AND sysdate + 5/24 -- if you want 5 hours ahead, for example
AND my_code='33'
GROUP BY my_code;

如果您希望能够更改小时数,您可以将这段代码变成一个函数,并将小时数和代码作为变量传递。

像这样:

CREATE FUNCTION myfunc
(
p_num_hours INT
, p_my_code VARCHAR
) RETURN INT
AS
l_ret INT;
BEGIN
SELECT count(*)
INTO l_ret
FROM my_table
WHERE my_date
BETWEEN sysdate
AND sysdate + p_num_hours/24
AND my_code=p_my_code

RETURN l_ret;
END;

关于sql - 优化 SQL 查询并动态使用当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com