gpt4 book ai didi

sql - 使用列与另一列 oracle 一起评估

转载 作者:行者123 更新时间:2023-12-02 22:10:37 25 4
gpt4 key购买 nike

我有一个包含 3 个字段的表:

字段 1(数字):具有如下值:1、2、50、40

字段 2 (VARCHAR):具有如下值:“+”、“-”、“*”

Field 3 (NUMBER): 像Field1: 5,65.4, 90

我如何评估这个字段的内容 2.

例子

|field1| field2| field3| RESULT
-------------------------------
| 1| +| 5| 6
| 1| *| 5| 5
| 1| -| 5| -4

最佳答案

正如 Annjawn 在 this answer 中解释的那样您可以使用 XMLQuery 的一些内置功能,特别是 .getnumberval(),伪造公式。这将比 CASE 语句慢得多,但它更简洁。

假设表:

create table tmp_test (
field1 number not null
, field2 varchar2(1) not null
, field3 number not null );

insert all
into tmp_test values (1, '+', 5)
into tmp_test values (1, '*', 5)
into tmp_test values (1, '-', 5)
select * from dual;

您的查询将如下所示:

SQL> select xmlquery(field1 || field2 || field3 returning content
2 ).getnumberval() as field4
3 from tmp_test;

FIELD4
----------
6
5
-4

SQL Fiddle

不过,我强烈建议不要在数据库中存储计算列。它只会导致问题,就像您更新数据库时您的列没有得到更新一样。执行此操作的正确方法是拥有一个 View ,其中包括您的计算定义并始终从该 View 中进行选择,或者使用 VIRTUAL column。如 create table documentation 中所定义.

然后您可以使用 XMLQueryDETERMINISTIC function ,例如 the one provided by APC , 以自动计算您的列。

如果你的表是这样创建的:

create table tmp_test (
field1 number not null
, field2 varchar2(1) not null
, field3 number not null
, field4 number generated always as (
xmlquery(field1 || field2 || field3 returning content
).getnumberval()
) virtual
);

然后一个更简单的查询将得到你的结果

SQL> select * from tmp_test;

FIELD1 F FIELD3 FIELD4
---------- - ---------- ----------
1 + 5 6
1 * 5 5
1 - 5 -4

SQL Fiddle

这样做的另一个好处是您的计算总是以完全相同的方式完成。对于需要此计算列的每一段代码,它们的实现方式并没有不同

关于sql - 使用列与另一列 oracle 一起评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371945/

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