sql - 在 oracle 中,我可以将字符串放在 num 数据类型列中吗?
问题描述
我的数据集
name salary
JAY 100
ALI 200
WARREN 500
JOHN null
我想知道我桌上的人的姓名和薪水。但是,如果薪水是空值,我希望出现“没有薪水”这个词。我尝试使用nvl,但数据类型不同,无法执行。有没有可能的方法?
解决方案
Gordon Linoff 向您展示了一种可行的方法 - 您遵循此建议绝对至关重要,仅将其作为开发报告的最后一步。
一个更好的选择是不理会查询,并使用您的前端程序(如 SQL*Plus、SQL Developer、Toad 或您使用的任何报告软件)来显示您需要的任何内容,而不是null
.
例如,在 SQL*Plus 中,您可以使用SET
命令(请注意,这是一条SQL*Plus 命令,而不是 SQL 语句;特别是,您不要以分号结束它。
set null 'no salary'
这是一个简短的演示 - 使用模式emp
中的表scott
。(我将它用于comm
列;表中的所有薪水都是非空的,但有些佣金是空的。)首先我显示默认结果(未显示null
),然后显示我如何发出SET
命令,然后我重新- 运行查询。
请注意这样做的显着优势:即使我们在列中添加了“文本”,非空值仍然显示为数字- 意思是,它们仍然显示为右对齐。使用 Gordon Linoff 的解决方案,该列中的所有内容都被视为字符串,因此所有数字都将左对齐,从而使该列更难阅读。
SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;
EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7499 ALLEN SALESMAN 1600 300
7521 WARD SALESMAN 1250 500
7654 MARTIN SALESMAN 1250 1400
7698 BLAKE MANAGER 2850
7844 TURNER SALESMAN 1500 0
7900 JAMES CLERK 950
6 rows selected.
SQL> set null 'no comm'
SQL> select empno, ename, job, sal, comm from scott.emp where deptno = 30;
EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7499 ALLEN SALESMAN 1600 300
7521 WARD SALESMAN 1250 500
7654 MARTIN SALESMAN 1250 1400
7698 BLAKE MANAGER 2850 no comm
7844 TURNER SALESMAN 1500 0
7900 JAMES CLERK 950 no comm
6 rows selected.
推荐阅读
- python - 我有一个清单,将相似的数字相加
- python - Python Binance 期货交易执行但账户余额没有变化
- python - 警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数
- jquery - 滑块 val 的 Ion RangeSlider 自定义函数?
- sql - BigQuery SQL 查询以获取上一季度的第一天和上一季度的最后一天
- php - Laravel Sail 没有在我的 macbook m1 上运行
- qt - QGraphicsView 中的背景在缩小时会产生锯齿
- spring-boot - Open API Spec V2.0 - 枚举类型字段的默认值
- android - APIs Retrofit GSON:数据类型一直在变化
- python - 将 Pandas 行数据拆分为多行而不添加列