gpt4 book ai didi

java.sql.SQLException : ORA-01843: not a valid month (Working in SQL DEVELOPER and doesn't work in JAVA)

转载 作者:行者123 更新时间:2023-12-02 03:56:15 26 4
gpt4 key购买 nike

我在数据库中有一个表,其中包含“Date_transaction”列,其类型为 varchar。

在我的 JAVA 代码中,我通过多个条件创建 SQL 查询。

当我在 Eclipse 中调试时,生成的查询如下所示:

SELECT *
FROM Transaction where 1=1
AND (to_date(Date_transaction,'YYYY/MM/DD HH:MI:SS') between '16/01/01' and '16/02/29')
AND projet = 'Project name'
AND nomtranche = 'tranche name' AND voletctrl = 'volet name'
AND (numeroimmeuble BETWEEN 1 AND 100)
AND validation = 1
AND statutDocNormal = 'statut'
AND numeroAppartement = 14
order by DateTrasaction DESC;

我在 SQL DEVELOPER 中执行此查询,查询执行成功,没有任何错误。

但在我的 Java 代码中,我收到此错误:java.sql.SQLException:ORA-01843:不是有效的月份。

当我想生成查询时,我使用此方法来转换我的日期,这是我在参数中花费的(在查询中是:16/01/01 和 16/02/29):

    public static String parseDate2(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd");
String dt = sdf.format(date);
return dt;
}

我试试这个answer但它不起作用。

最佳答案

您依赖于 session 的 NLS_DATE_FORMAT,该格式在客户端中设置不同,并且可能通过您的 Java 语言环境间接设置。使用具有特定格式掩码的显式转换:

... between to_date('16/01/01', 'RR/MM/DD') and to_date('16/02/29', 'RR/MM/DD') ...

但最好使用四位数年份和 YYYY(还记得 Y2K 吗?)或日期文字 - 这些不适用于变量值。

这看起来也是错误的:

to_date(Date_transaction,'YYYY/MM/DD HH:MI:SS')

如果“date_transaction”已经是一个日期,那么您将隐式地将其转换为字符串,然后再转换回日期,这是毫无意义且危险的。然后可能返回一个字符串与您的固定值进行比较。如果它是一个字符串,那么它不应该是。无论哪种方式,您都需要 HH24 而不仅仅是 HH,以便您可以区分 AM 和 PM。

如果这是您需要的日期:

...
date_transaction between to_date('2016/01/01', 'YYYY/MM/DD')
and to_date('2016/02/29', 'YYYY/MM/DD')
...

关于java.sql.SQLException : ORA-01843: not a valid month (Working in SQL DEVELOPER and doesn't work in JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420988/

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