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 empName 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的主要内容,如果未能解决你的问题,请参考以下文章