gpt4 book ai didi

sql - 在 sql 语句的 IN 子句中使用多个日期

转载 作者:行者123 更新时间:2023-12-04 06:02:48 26 4
gpt4 key购买 nike

我有返回逗号分隔日期列表的函数(例如“2011 年 12 月 24 日”、“2011 年 12 月 26 日”、“2011 年 12 月 18 日”、“2011 年 12 月 27 日”。

我将其作为单个字符串接收。

我想使用这个字符串来构建一个选择查询,我想在 IN 子句中使用该字符串。

例如

select *
from wfdisplaymgmt
where programstartdate IN(TO_DATE('Dec 26, 2011','MON dd, yyyy'))

由于我得到了多个日期,我想使用语句中的所有日期。如何编写包含多个日期的 sql 查询。请帮忙。

更新:
另一件事是我有一个带有文本框的窗口和一个按钮,单击该按钮执行 sql 查询。查询返回不同数量的列值,其中可以选择每个值。当用户选择所需的值时,如果我选择了四个日期,则将值复制到文本框(例如'Dec 24, 2011','Dec 26, 2011','Dec 18, 2011','Dec 27, 2011')。现在我的字符串我想在 sql 语句中使用这个字符串,我根据在文本框中找到的字符串 ievalues 中找到的选定日期选择表的所有列。

'Mon DD,YYYY' 是字符串中返回的日期格式。

我想要一个类似于
选择 *
来自 wfdisplaymgmt
where programstartdate IN(来自文本框的日期值)

我该怎么做呢?

最佳答案

更改您的 PLSQL 函数以返回用户定义的数据类型 TABLE OF DATE (或 TIMESTAMP )并使用 IN 匹配值。

请注意,您可能需要 TRUNC日期值以匹配它们。中午!=午夜!

以下代码说明了该方法。

WHENEVER SQLERROR EXIT FAIL ROLLBACK
set echo on

COLUMN programstartdate FORMAT A45
column column_value format a45

set serveroutput on

<<REINITIALIZE>>
BEGIN
FOR DOIT IN (SELECT 'DROP TABLE ' || TABLE_NAME AS CMD FROM USER_TABLES WHERE TABLE_NAME = 'WFDISPLAYMGMT')
LOOP
EXECUTE IMMEDIATE DOIT.CMD;
DBMS_OUTPUT.PUT_LINE ('Dropped test table via command: ' || doit.CMD);
end loop;
dbms_random.seed('This doesn''t quite feel random until I add the microseconds ' || to_char (systimestamp, 'D FF9'));
END REINITIALIZE;
/

CREATE OR REPLACE TYPE DATELIST AS TABLE OF date;
/

show errors type datelist

CREATE OR REPLACE FUNCTION GETDATES (HOWMANY IN NUMBER) RETURN DATELIST
IS
TO_RETURN DATELIST := datelist();
BEGIN
for stepback in 1 .. howmany
loop
to_return.extend();
TO_RETURN(stepback) := trunc(sysdate - stepback);
end loop;
RETURN TO_RETURN;
END GETDATES;
/

show errors function getdates;

select * from table(cast (getdates (7) as datelist));

create table WFDISPLAYMGMT
as
select
TRUNC(dbms_random.value (50, 10000)) as bogus_id,
column_value as programstartdate
from (select rownum as row_no, column_value from table(cast (getdates (30) as datelist)))
where abs (mod (row_no, 3)) = 1
;
commit;

select count (*) as generated_rows from WFDISPLAYMGMT;


select *
from WFDISPLAYMGMT
where programstartdate in (select * from table (cast (getdates (15) as datelist)));

关于sql - 在 sql 语句的 IN 子句中使用多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8745815/

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