首页 > 解决方案 > 在 oracle 中,我可以将字符串放在 num 数据类型列中吗?

问题描述

我的数据集

name     salary
JAY      100
ALI      200
WARREN   500
JOHN     null

我想知道我桌上的人的姓名和薪水。但是,如果薪水是空值,我希望出现“没有薪水”这个词。我尝试使用nvl,但数据类型不同,无法执行。有没有可能的方法?

标签: sqldatabaseoracle

解决方案


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.

推荐阅读