oracle case when的多种用法举例
时间: 2023-10-23 13:45:53 浏览: 119
1. 使用case when进行条件判断
CASE WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
WHEN score >= 70 AND score < 80 THEN 'C'
WHEN score >= 60 AND score < 70 THEN 'D'
ELSE 'F' END AS grade
2. 使用case when进行字段转换
CASE gender WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown' END AS gender_transformed
3. 使用case when进行字符串处理
CASE WHEN length(name) > 10 THEN substr(name, 1, 10) || '...'
ELSE name END AS name_trimmed
4. 使用case when进行数值计算
CASE WHEN price < 10 THEN price * 0.9
WHEN price >= 10 AND price < 20 THEN price * 0.8
ELSE price * 0.7 END AS discounted_price
相关问题
case when函数怎么使用举例
在Oracle中,CASE WHEN函数可以根据条件返回不同的值。其语法如下:
```sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
```
其中,condition1、condition2等是条件表达式,result1、result2等是对应条件成立时返回的结果,default_result是当所有条件都不满足时返回的默认结果。
举个例子,如果我们要根据一个学生的分数返回其等级(优、良、中、差),可以使用如下SQL语句:
```sql
SELECT name, score,
CASE
WHEN score >= 90 THEN '优'
WHEN score >= 80 THEN '良'
WHEN score >= 60 THEN '中'
ELSE '差'
END AS grade
FROM student;
```
这个例子中,我们使用了CASE WHEN函数来根据学生的分数返回其等级。如果分数大于等于90分,则返回"优";如果分数大于等于80分,则返回"良";如果分数大于等于60分,则返回"中";如果分数小于60分,则返回"差"。
需要注意的是,CASE WHEN函数也可以嵌套使用,以实现更复杂的条件判断。
Oracle查询表数据插入,举例
要查询Oracle数据库中表的数据并生成INSERT INTO语句,可以使用多个内置函数和SELECT语句来实现。具体步骤如下:
1. 使用SELECT语句查询要操作的表中的数据,例如:
```sql
SELECT * FROM my_table;
```
2. 使用DESCRIBE命令或查询表的元数据,获取表的字段名和数据类型,例如:
```sql
DESCRIBE my_table;
```
或者
```sql
SELECT column_name, data_type FROM user_tab_columns WHERE table_name = 'MY_TABLE';
```
这样就可以获取到my_table表的字段名和数据类型。
3. 根据查询到的表数据和表元数据,构造INSERT INTO语句。具体步骤如下:
- 手动构造INSERT INTO语句:根据查询到的表数据和表元数据,手动构造INSERT INTO语句。例如:
```sql
INSERT INTO my_table (ID, NAME, AGE, GENDER)
VALUES (1, 'Alice', 25, 'F');
```
- 使用多个内置函数构造INSERT INTO语句:使用多个内置函数来构造INSERT INTO语句。例如:
```sql
SELECT 'INSERT INTO my_table (' ||
LISTAGG(column_name, ', ') WITHIN GROUP (ORDER BY column_id) || ') VALUES (' ||
LISTAGG(CASE data_type
WHEN 'NUMBER' THEN TO_CHAR(column_value)
WHEN 'DATE' THEN TO_CHAR(column_value, '''YYYY-MM-DD HH24:MI:SS''')
ELSE '''' || REPLACE(column_value, '''', '''''') || ''''
END,
', ') WITHIN GROUP (ORDER BY column_id) || ');' AS insert_statement
FROM (SELECT column_id, column_name, data_type,
CASE data_type
WHEN 'NUMBER' THEN TO_NUMBER(value)
WHEN 'DATE' THEN TO_DATE(value, 'YYYY-MM-DD HH24:MI:SS')
ELSE value
END AS column_value
FROM my_table
UNPIVOT (value FOR column_name IN (ID, NAME, AGE, GENDER)));
```
这样就可以根据查询到的表数据和表元数据自动生成INSERT INTO语句了。
需要注意的是,自动生成的INSERT INTO语句可能会存在语法错误或数据类型不匹配等问题,需要根据实际情况进行调整和修正。同时,自动生成的INSERT INTO语句可能不包含默认值、计算列等信息,需要手动添加。
阅读全文