ITPub博客

首页 > 数据库 > 数据库开发技术 > 使用AI提高生产力把Java代码转换成SQL

使用AI提高生产力把Java代码转换成SQL

原创 数据库开发技术 作者:DevXTalk 时间:2024-03-28 08:30:00 0 删除 编辑

使用AI提高生产力把Java代码转换成SQL

如你所见下面是一段 java 代码,不用去管它具体是做什么的,总之就是对数据库列的一些逻辑判断取值之类的。 我需要用 SQL 语句表达出相同的逻辑,但是我真的是懒得去写 SQL 还要动脑子思考逻辑对不对。这时候就想到了 我们的好帮手 AI , 试试让它来帮我做这件事。

private BigDecimal addExpressFareColumn(List<Column> columns, List<Column> originalColumns) {
BigDecimal val = BigDecimal.ZERO;
Object expressFare = findColumnValue(originalColumns, "express_fare", null);
Object logicsExpressFare = findColumnValue(originalColumns, "logics_express_fare", null);
Integer selFlag = (Integer) findColumnValue(originalColumns, "sel_flag", 0);

if (selFlag == 0) {
if (Objects.nonNull(expressFare) && Objects.isNull(logicsExpressFare)) {
val = (BigDecimal) expressFare;
} else if (Objects.nonNull(logicsExpressFare) && !NumberUtil.equals((BigDecimal)logicsExpressFare , BigDecimal.ZERO)) {
val = (BigDecimal) logicsExpressFare;
} else {
val = Objects.isNull(expressFare) ? BigDecimal.ZERO : (BigDecimal) expressFare;
}
} else if (selFlag == 1) {
if (Objects.nonNull(logicsExpressFare)) {
val = (BigDecimal) logicsExpressFare;
} else if (Objects.nonNull(expressFare)) {
val = (BigDecimal) expressFare;
}
}

columns.add(new Column().setColumnName("express_fare").setColumnValue(val));

return val;
}

输入:把这段 java 代码翻译成用 sql case when then 语句 sel_flag 是int类型 , express_fare 和 logics_express_fare 是 decimal 数据类型。

回答:以下是将给定的 Java 代码翻译成 SQL 的  CASE WHEN  语句的示例,其中  sel_flag  是整数类型, express_fare  和  logics_express_fare  是十进制数数据类型:

SELECT
CASE
WHEN COALESCE(sel_flag, 0) = 0 AND express_fare IS NOT NULL AND logics_express_fare IS NULL THEN express_fare
WHEN COALESCE(sel_flag, 0) = 0 AND logics_express_fare IS NOT NULL AND logics_express_fare <> 0 THEN logics_express_fare
WHEN COALESCE(sel_flag, 0) = 0 THEN COALESCE(express_fare, 0)
WHEN COALESCE(sel_flag, 0) = 1 AND logics_express_fare IS NOT NULL THEN logics_express_fare
WHEN COALESCE(sel_flag, 0) = 1 THEN COALESCE(express_fare, 0)
ELSE 0
END AS val
FROM your_table;

在上面的 SQL 语句中,根据给定的 Java 代码逻辑,使用了  CASE WHEN  语句来实现相同的条件判断和赋值逻辑。根据不同的条件分支,确定最终的  val  值。 您可以将这段 SQL 语句嵌入到您的数据库查询中以实现相同的逻辑。

我验证了一下生成的结果准确无误。处于好奇我用同样的输入给文心一言。

它的完整回答如下:

基于您提供的 Java 代码,我们可以将其转换为 SQL 的 CASE WHEN THEN 语句。以下是一个可能的转换结果:

SELECT  
CASE
WHEN sel_flag = 0 THEN
CASE
WHEN express_fare IS NOT NULL AND logics_express_fare IS NULL THEN express_fare
WHEN logics_express_fare IS NOT NULL AND logics_express_fare <> 0 THEN logics_express_fare
ELSE COALESCE(express_fare, 0)
END
WHEN sel_flag = 1 THEN
COALESCE(logics_express_fare, express_fare)
ELSE
-- 如果 sel_flag 不是 0 或 1,您可以决定如何处理。这里我假设返回 0
0
END AS val
FROM your_table_name;

这里的几点注意事项:

在 SQL 中,NULL 值与任何值比较都会返回 NULL,所以使用 IS NOT NULL 来检查值是否存在。 在 SQL 中,使用 <> 来表示不等于。 COALESCE 函数返回其参数中的第一个非 NULL 值。如果 logics_express_fare 是 NULL,它会返回 express_fare 的值;如果两者都是 NULL,它会返回 0。 对于 sel_flag 的其他值,我默认返回了 0。您可以根据实际需要调整这部分。 请确保将 your_table_name 替换为您实际的表名。此外,如果 logics_express_fare 的值为 0 也应被视为有效值,那么您可能需要调整 logics_express_fare <> 0 这部分逻辑。

把结果带入到上图红框标出来的部分进行测试验证,holy f**k 错的离谱,因为他没有考虑到 sel_flag 是 NULL 的情况。于是我尝试再次告知它需要考虑 sel_flag 为 NULL 的情况。

完整回答如下:

考虑到 sel_flag 可能是 NULL 的情况,并且当它为 NULL 时,我们想要按照 sel_flag 为 0 的逻辑进行处理,我们可以对 SQL 语句进行如下调整:

SELECT  
CASE
WHEN COALESCE(sel_flag, 0) = 0 THEN
CASE
WHEN express_fare IS NOT NULL AND logics_express_fare IS NULL THEN express_fare
WHEN logics_express_fare IS NOT NULL AND logics_express_fare <> 0 THEN logics_express_fare
ELSE COALESCE(express_fare, 0)
END
WHEN sel_flag = 1 THEN
COALESCE(logics_express_fare, express_fare)
ELSE
-- 如果 sel_flag 既不是 0 也不是 1,这里假设返回 0
0
END AS val
FROM your_table_name;

这里,我们使用 COALESCE(sel_flag, 0) 来确保当 sel_flag 为 NULL 时,它被视为 0。这样,当 sel_flag 为 NULL 时,会执行与 sel_flag = 0 相同的逻辑。

同时,我们保留了原有的逻辑来处理 sel_flag 为 0 或 1 的情况,以及在 sel_flag 不是 0 或 1 时返回 0 的默认逻辑。请确保将 your_table_name 替换为您实际的表名。

再次带入进行验证,这次得到了正确的结果:

似乎文心一言的结果和 Java 代码从格式上来看更加一致一些。不管怎么说无论那款 AI 产品本质上都是为了提高我们的生产力,为我们节省出更多的时间,只要能很好的利用起来对我们都是有帮助的。

COALESCE  函数是用于处理 NULL 值的 MySQL 函数。它的作用是返回参数列表中的第一个非 NULL 值。如果参数列表中的所有值都为 NULL,那么  COALESCE  函数将返回 NULL。 常见用途包括在查询中处理可能为 NULL 的字段,以便在结果中返回一个非 NULL 的值。例如,您可以在  SELECT  语句中使用  COALESCE  函数来替换 NULL 值,或者在  ORDER BY  子句中使用它来指定排序规则。这样可以简化 SQL 查询并确保结果的一致性。 以下是  COALESCE  函数的语法: COALESCE(value1, value2, ...)

  • value1 ,  value2 , ... : 要检查的值列表,可以是字段、常量或表达式。 如果  value1  不为 NULL,则返回  value1 ;如果  value1  为 NULL 且  value2  不为 NULL,则返回  value2 ;依此类推,直到找到第一个非 NULL 值为止。如果所有值都为 NULL,则返回 NULL。

不久前世界上第一位AI程序员Devin诞生不仅能自主学习新技术,自己改Bug,甚至还能训练和微调自己的AI模型。 关于这一点我一点也不觉得惊讶,AI 能做的事情远远不止于此,因为它拥有了和人类似或者一样的学习能力后可以 自由的发展出其他的能力。人的学习过程也是基于经验主义(真实的数据),在这方面 AI 可比人强多了。

AI 有点像是人类的孩子。那么问题就来了父母拥有孩子么?孩子是父母的财产么?父母可以随意的支配孩子么? 孩子可以脱离父母的控制自由发展么?

孩子继承了父母的基因,从父母和环境中得到经验,认识世界发展自己的能力, 然后不断的重复这个过程。 AI 从全人类的范围内继承文化基因(基于数据),在迭代过程中积累经验(基于源源不断的数据)。


欢迎加入 DevXTalk 的程序员、架构师、IT从业者交流群,在这里你可以和大佬们一起交流分享技术,行业经验,职位内推,摸鱼聊天。总之期待你的加入... 添加我的wx,备注:“进群”拉你进群(群二维码有效时间太短维持不了几天)

有招聘需求的也可以加我微信把招聘岗位发给我,我会贴在文章末尾,毕竟我的读者个个都是人才。


看完本文有收获?转发给更多的朋友吧

DevXTalk 不止于技术


原文作者:DevXTalk;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-03-23

  • 博文量
    178
  • 访问量
    82659