oracle case when 关键字then 后面可以进行函数加减吗
时间: 2023-10-25 11:13:03 浏览: 47
是的,Oracle 的 CASE WHEN 关键字中的 THEN 后面可以进行函数加减,例如:
```
SELECT CASE
WHEN a = 1 THEN ABS(b - c)
WHEN a = 2 THEN ROUND(b * c, 2)
ELSE NULL
END AS result
FROM table;
```
在这个例子中,当 a 等于 1 时,返回 b 与 c 的绝对值;当 a 等于 2 时,返回 b 与 c 相乘并保留两位小数;其他情况下返回空值。
相关问题
oracle case when then
在Oracle中,CASE WHEN THEN语句用于根据给定的条件确定返回值。它有两种主要的语法形式。
第一种形式是简单的CASE WHEN THEN语句,语法如下:
```
CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
ELSE default_result
END
```
这种形式是根据给定的表达式确定返回值。例如,根据不同的国家确定所属的大洲,可以使用以下语句:
```
CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他'
END
```
第二种形式是Case搜索函数,语法如下:
```
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
```
这种形式是根据给定的条件确定返回值。例如,根据不同的产品类型确定产品的类别,可以使用以下语句:
```
SELECT product_id, product_type_id,
CASE
WHEN product_type_id = 1 THEN 'Book'
WHEN product_type_id = 2 THEN 'Video'
WHEN product_type_id = 3 THEN 'DVD'
WHEN product_type_id = 4 THEN 'CD'
ELSE 'Magazine'
END
FROM products
```
这两种方式都可以实现相同的功能。简单的CASE函数写法相对简洁,但是功能上有一定的限制,它只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略。而Case搜索函数则更加灵活,可以根据给定的条件确定返回值。
oracle中得case when中when语句可以使用CONTAINS函数么
在Oracle中,CASE WHEN语句中的WHEN条件可以使用CONTAINS函数,但需要注意以下几点:
1. CONTAINS函数需要在SELECT语句中使用,因此需要将CASE WHEN语句嵌套在SELECT语句中。
2. CONTAINS函数需要指定表名称和列名称,因此需要将其嵌套在FROM语句中。
3. CONTAINS函数返回的是一个匹配项的数量,因此需要将其与0进行比较来判断是否存在匹配项。
例如,假设我们有一个表employee,其中包含一个名为name的列,我们想要在CASE WHEN语句中判断name列中是否包含某个字符串,可以使用以下语句:
```
SELECT
CASE
WHEN CONTAINS((SELECT name FROM employee), 'search_string') > 0 THEN 'found'
ELSE 'not found'
END
FROM dual;
```
该语句中使用了子查询获取name列的值,并将其作为第一个参数传递给CONTAINS函数,第二个参数为要查找的字符串。如果存在匹配项,则CONTAINS函数返回一个大于0的数值,此时WHEN条件为真,返回'found';否则返回'not found'。