SQL判断字段是不是为空,为NULL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL判断字段是不是为空,为NULL相关的知识,希望对你有一定的参考价值。

参考技术A SQL语句条件查询时,有时会判断某个字段是否为空或者是否为NULL;

字段内容为空有两种情况

1.为null

2.为字符串的空''

语句如下:

select * from table(表名) where column is null or trim(字段)='';
这样就可以排除字段内容为null、''的。

判断某个字段不为空

select * from table(表名) where trim(column) != '';
曾经尝试判断null:is not null.但是不起作用,放弃。。。直接 trim(字段) != '' 就能解决。

oracle判断表是不是存在字段

方法一:可以用user_tab_cols表进行查询,查询有结果表示字段存在:
sql:select * from user_tab_cols where table_name='T_AAA' and column_name='COL_BBB';
方法二:也可以用all_tab_columns表进行查询,查询有结果表示字段存在:
sql:select * from all_tab_columns where owner='SYS_CCC' and table_name='T_AAA' and column_name='COL_BBB';
备注:所有的查询字段必须是大写,否则查询会有误差。
参考技术A oracle数据库中的sys scheme下有两张表user_tab_columns和user_tab_cols都保存了当前用户的表、视图和Clusters中的列信息,如果你需要查询当前用户下某张表的某个字段的话,可以写如下sql:select * from user_tab_cols where table_name='T_AAA' and column_name='COL_BBB';该sql查询T_AAA表的字段COL_BBB的结构信息,包括列名、表名、列字段类型、长度、精度、小数点后位数、是否允许为空、默认值等等。oracle数据库中的sys scheme下还有另外两张表all_tab_columns和all_tab_cols保存了数据库中所有表的列信息,如果你需要查询某张表的某个字段的话,也可以这样写sql:select * from all_tab_columns where owner='SYS_CCC' and table_name='T_AAA' and column_name='COL_BBB';该sql查询SYS_CCC用户下T_AAA表的字段COL_BBB的结构信息,结构信息和user_tab_columns的结构信息基本相同。 参考技术B oracle在plsql里执行如下代码:DECLARE v_table tabs.table_name%TYPE; v_sql VARCHAR2(888); v_q NUMBER; CURSOR c1 IS SELECT table_name tn FROM tabs; TYPE c IS REF CURSOR; c2 c; BEGIN DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:'); FOR r1 IN c1 LOOP v_table :=r1.tn; v_sql :='SELECT COUNT(*) q FROM '||v_table; OPEN c2 FOR v_sql; LOOP FETCH c2 INTO v_q; EXIT WHEN c2%NOTFOUND; IF v_q=0 THEN DBMS_OUTPUT.PUT_LINE(v_table); END IF; END LOOP; CLOSE c2; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred'); END; 然后点output,显示的就是空表本回答被提问者和网友采纳 参考技术C 1、判断表是否在数据库中存在
'SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_NAME = UPPER (''' || V_TBL_NAME || ''')'
2、判断列是否在数据库中存在
‘SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('''||V_TBL_NAME || ''') AND COLUMN_NAME = ''SURVEYRESULT'''

CREATE OR REPLACE PROCEDURE INSERTTABLESBYENTERPRISEID (

ENTERPRISEID IN STRING

)

IS

TYPE CURSOR_TEMP IS REF CURSOR;

V_CURSOR CURSOR_TEMP;

V_TBL_NAME VARCHAR2 (100) := '';

V_SQL VARCHAR2 (500) := '';

V_EXESQL VARCHAR2 (500) := '';

V_EXITOBJ INTEGER := 0;

BEGIN

V_SQL :=

'SELECT DISTINCT(RESULTTABLENAME) FROM SD_T_A01_'

|| ENTERPRISEID

|| ' WHERE ISDEL=0';

OPEN V_CURSOR FOR V_SQL;

LOOP

FETCH V_CURSOR INTO V_TBL_NAME;

EXIT WHEN V_CURSOR%NOTFOUND;

IF (V_TBL_NAME IS NULL)

THEN

BEGIN

V_TBL_NAME := 'SD_T_A07_' || ENTERPRISEID;

END;

END IF;

V_EXESQL := 'SELECT COUNT(*) FROM USER_OBJECTS WHERE OBJECT_NAME = UPPER (''' || V_TBL_NAME || ''')';

EXECUTE IMMEDIATE V_EXESQL INTO V_EXITOBJ;

IF V_EXITOBJ > 0

THEN

NULL;

V_EXITOBJ := 0;

V_EXESQL := 'SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = UPPER('''|| V_TBL_NAME || ''') AND COLUMN_NAME = ''SURVEYRESULT''';

EXECUTE IMMEDIATE V_EXESQL INTO V_EXITOBJ;

IF V_EXITOBJ > 0

THEN

V_SQL := 'ALTER TABLE '|| V_TBL_NAME|| ' ADD SurveyResult VARCHAR2(500)';

EXECUTE IMMEDIATE V_SQL;

END IF;

END IF;

END LOOP;

COMMIT;

END INSERTTABLESBYENTERPRISEID;
参考技术D

你是说表里面有多少列么?

SQL> desc emp
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> select count(COLUMN_NAME) from USER_TAB_COLUMNS where TABLE_NAME='EMP';

COUNT(COLUMN_NAME)
------------------
                 8


类似的视图还有DBA_TAB_COLUMNS 和 ALL_TAB_COLUMNS

以上是关于SQL判断字段是不是为空,为NULL的主要内容,如果未能解决你的问题,请参考以下文章

sql怎么判断一个值是不是为空

在Oracle中怎么判断字段是不是为空

case when 当中怎么判断一个字段是不是为空

关于 SQL SUM 求和 怎么判断 字段是不是为空

php怎么判断字段是不是为空

php怎么判断字段是不是为空