gpt4 book ai didi

java - Oracle 中是否有函数/SQL 查询可以过滤数据(如果可以转换为日期时间)?

转载 作者:行者123 更新时间:2023-11-30 04:24:46 26 4
gpt4 key购买 nike

我正在编写一个使用 Oracle 数据库进行存储的 Java 软件。我可能最好将其描述为某种审计跟踪(?),记录我的测试受众在什么日期以及在什么计算机上做了什么。这些都是手动输入的,所以人们手动输入这些信息,然后将其保存到数据库中,然后由管理员查看。

这是我用于检索数据的 SQL 语句:

SELECT fld 1 as EmpNumber, 
fld2 as EmpName,
fld6 as Date
FROM tblReportTemp
LEFT JOIN tblPersonalInfo b ON $P{hrStoreOp}= b.ID_PERSONAL
WHERE computerName = $P{COMPNAME}
ORDER BY fld6,fld2 asc

我的队友决定将所有字段设为 VARCHAR 类型,然后决定让用户输入日期,而不是使用日期选择器。因此,很多测试用户,即懒惰的用户,只是简单地输入最容易到达的任何内容,例如 Q、1,甚至空格。因此,首先,它不会按日期正确排列,其次,我在排列之前尝试通过 TO_DATE(fld6, 'MM/dd/yy') 将数据转换为日期,但失败了,因为它无法将“Q”转换为日期。

此后,我用日期选择器替换了文本框,但是,我们不允许修改数据库。

所以我建议的解决方案是修改我上面的SQL语句,过滤掉那些无法转换为日期的。 Oracle 是否有可以执行此操作的 SQL 查询?

谢谢。

最佳答案

您可以使用函数进行转换并将不良数据丢弃为 NULL:

CREATE OR REPLACE FUNCTION my_to_date(p_date_string IN VARCHAR2) RETURNS DATE
IS
BEGIN
RETURN TO_DATE(p_date_string, 'MM/DD/YY');
EXCEPTION WHEN OTHERS THEN
RETURN NULL;
END;

创建后使用它:

SELECT some_column
, my_to_date(my_date_string_column) as real_date
FROM some_table
WHERE ...

此外,您确实应该将数据类型更改为 DATE 并强制用户仅输入有效日期。根据您问题中的列名称,您的同事似乎正在尝试对所有内容使用通用的“弹性字段”。这通常是一个非常糟糕的主意,除非您真的计划在同一行中存储任意类型的数据(这通常也是一个坏主意)。

关于java - Oracle 中是否有函数/SQL 查询可以过滤数据(如果可以转换为日期时间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16228236/

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