gpt4 book ai didi

sql - 在 Oracle SQL 中将用户提示作为日期(甚至是字符串)传递

转载 作者:行者123 更新时间:2023-12-04 15:41:38 24 4
gpt4 key购买 nike

我正在使用 Business Objects,它运行在 Oracle SQL 数据库之上。我无权访问 PL 或任何类型的 SQL 命令行,也无权写入数据库。我只能将查询作为单个命令运行,需要输出一组定义的列。

我能够从用户提示中获取数据,这些数据在 SQL 中显示为:

@variable('Prompt1')

例如我可以说:
SELECT
A.SomeDate
FROM
A
WHERE
A.SomeDate BETWEEN @variable('Start') AND @variable('End Date')

这很容易。它运行;要求用户输入一些日期;然后返回它们之间的所有匹配项(包括)。

然而,问题是,用户将使用 Business Objects 的“Infoview”系统来运行查询,并且提示系统会显示一个日期选择器 - 默认情况下包括日期的时间部分(“01/01/2016 12 :00:00 上午”)。

如果用户不删除时间部分,如果 SomeDate 值超出所选时间,则可能会导致记录丢失。例如,如果我想获取 TODAY 的所有记录,那么从技术上讲,我想要 00:00:00(午夜)和 23:59:59 之间的所有内容。

我真正希望能够做的是在查询变量周围使用 TRUNC,如下所示:
WHERE
A.SomeDate BETWEEN TRUNC(@variable('Start')) AND TRUNC(@variable('End Date'))

...然而,这会导致编译错误:“不一致的数据类型:预期 DATE 获得 NUMBER”。我不知道为什么 Oracle 会在编译之前将提示视为数字数据类型。

有谁知道如何获取@variable 值并将其转换为可以截断为日期值的值?

因此,我试图找出解决此问题的方法。我想到的一件事是我是否可以使用提示变量并将其显式转换为日期,使用 TO_DATE

编辑:有人向我指出 TRUNC 将无效,因为“12:00:00 AM”已经是午夜。因此,我认为我误解了 TRUNC。它似乎将其截断到午夜:而我认为它只是完全删除了日期的时间部分,这意味着匹配将在 00:00:00 和 23:59:59 之间的任何时间返回。

我真正想要的是:如果 SomeDate 有一个时间部分,例如,11:03,那么当结束日期提示仅指定日期时,我如何确保将其包括在内?

最佳答案

尝试使用 TO_CHAR()TO_DATE()一起 :

WHERE
A.SomeDate > TO_DATE(TO_CHAR(@variable('Prompt1'),'ddmmyyyy'),'ddmmyyyy')

关于sql - 在 Oracle SQL 中将用户提示作为日期(甚至是字符串)传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998639/

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