gpt4 book ai didi

java - Oracle jdbc 编号无效

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:29 24 4
gpt4 key购买 nike

我正在尝试执行以下查询:

String query =  "select NUMERO_CHAUFFEUR, avg(DISTANCE) as DISTANCE " +
"from " +
"(select NUMERO_CHAUFFEUR, " +
"6387.7 * ACOS((sin(LATITUDE_DEPART / 57.29577951) * SIN(LATITUDE_ARRIVEE / 57.29577951)) + " +
"(COS(LATITUDE_DEPART / 57.29577951) * COS(LATITUDE_ARRIVEE / 57.29577951) * " +
"COS(LONGITUDE_ARRIVEE / 57.29577951 - LONGITUDE_DEPART / 57.29577951))) as DISTANCE " +
"from " +
"(select l.NUMERO_CHAUFFEUR, " +
"regexp_substr(d1.COORDONNEES, '^[^,]+') as LATITUDE_DEPART, " +
"trim(leading ',' FROM regexp_substr(d1.COORDONNEES, ',.*$')) AS LONGITUDE_DEPART, " +
"regexp_substr(d2.COORDONNEES, '^[^,]+') as LATITUDE_ARRIVEE, " +
"trim(leading ',' FROM regexp_substr(d2.COORDONNEES, ',.*$')) AS LONGITUDE_ARRIVEE " +
"from LIVRAISONS l " +
"inner join DEPOTS d1 on(l.NUMERO_DEPOT_DEPART = d1.NUMERO_DEPOT) " +
"inner join DEPOTS d2 on(l.NUMERO_DEPOT_ARRIVE = d2.NUMERO_DEPOT) " +
")) " +
"group by (NUMERO_CHAUFFEUR)";

但是抛出 java.sql.SQLException: ORA-01722: 无效数字。有谁知道为什么?因为如果我使用 sqlplus 直接在 sql 中执行查询,它就可以正常工作。

使用sqlplus执行查询的结果:

NUMERO_CHAUFFEUR AVG(DISTANCE)
---------------- -------------
1 507.064894
2 703.326572
5 846.966137
4 511.914202

我已尝试以下操作,但错误仍然存​​在:

String query =  "select NUMERO_CHAUFFEUR, avg(DISTANCE) as DISTANCE " +
"from " +
"(select NUMERO_CHAUFFEUR, " +
"to_number('6387.7') * ACOS((sin(LATITUDE_DEPART / to_number('57.29577951')) * SIN(LATITUDE_ARRIVEE / to_number('57.29577951'))) + " +
"(COS(LATITUDE_DEPART / to_number('57.29577951')) * COS(LATITUDE_ARRIVEE / to_number('57.29577951')) * " +
"COS(LONGITUDE_ARRIVEE / to_number('57.29577951') - LONGITUDE_DEPART / to_number('57.29577951')))) as DISTANCE " +
"from " +
"(select l.NUMERO_CHAUFFEUR, " +
"to_number(regexp_substr(d1.COORDONNEES, '^[^,]+')) as LATITUDE_DEPART, " +
"to_number(trim(leading ',' FROM to_number(regexp_substr(d1.COORDONNEES, ',.*$')))) AS LONGITUDE_DEPART, " +
"to_number(regexp_substr(d2.COORDONNEES, '^[^,]+')) as LATITUDE_ARRIVEE, " +
"to_number(trim(leading ',' FROM to_number(regexp_substr(d2.COORDONNEES, ',.*$')))) AS LONGITUDE_ARRIVEE " +
"from LIVRAISONS l " +
"inner join DEPOTS d1 on(l.NUMERO_DEPOT_DEPART = d1.NUMERO_DEPOT) " +
"inner join DEPOTS d2 on(l.NUMERO_DEPOT_ARRIVE = d2.NUMERO_DEPOT) " +
")) " +
"group by (NUMERO_CHAUFFEUR)";

最佳答案

尝试将字符串转换为数字时出现ORA-01722错误,并且字符串无法转换为数字。regexp_substr 将返回字符串,并且您将其称为 LATITUDE_DEPART,然后您使用该值进行数学运算,但该值不正确。您应该首先将其转换为数字。这可能对您有帮助:

TO_NUMBER(regexp_substr(d1.COORDONNEES, '^[^,]')) LATITUDE_DEPART

对所有相同的部分执行此操作。

关于java - Oracle jdbc 编号无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234411/

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