如何查找仅包含数字数据的非数字列?

法比安·巴尼(Fabian Barney)

我想在我的Oracle数据库模式中找到仅包含数字数据但具有非数字类型的所有列。(因此,基本上是带有可能错误选择的数据类型的列候选。)

我有一个查询所有varchar2-columns:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM user_tab_cols
WHERE DATA_TYPE = 'VARCHAR2';

此外,我有一个查询来检查表myTable和列内的任何非数字数据myColumn

SELECT 1
FROM myTable
WHERE NOT REGEXP_LIKE(myColumn, '^[[:digit:]]+$');

我喜欢以这样的方式组合两个查询,即第一个查询仅返回not exists第二个查询所在

这里的主要问题是,第一个查询位于数据字典的meta层上,其中TABLE_NAME和COLUMN_NAME作为数据出现,而我identifiers在第二个查询中需要该数据作为(而不是作为数据)。

在伪SQL中,我有这样的想法:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM user_tab_cols
WHERE DATA_TYPE = 'VARCHAR2'
AND NOT EXISTS
(SELECT 1 from asIdentifier(TABLE_NAME) 
WHERE NOT REGEXP_LIKE(asIdentifier(COLUMN_NAME), '^[[:digit:]]+$'));
温弗里德(Wernfried Domscheit)

创建一个函数,如下所示:

create or replace function isNumeric(val in VARCHAR2) return INTEGER AS
res NUMBER;
begin
   res := TO_NUMBER(val);
   RETURN 1;
EXCEPTION
   WHEN OTHERS THEN
      RETURN 0;
END;

然后,您可以像这样使用它:

DECLARE
  r integer;
BEGIN
   For aCol in (SELECT TABLE_NAME, COLUMN_NAME FROM user_tab_cols WHERE DATA_TYPE = 'VARCHAR2') LOOP
      -- What about CHAR and CLOB data types?
      execute immediate 'select count(*) from '||aCol.TABLE_NAME||' WHERE isNumeric('||aCol.COLUMN_NAME||') = 0' into r;
      if r = 0 then
         DBMS_OUTPUT.put_line(aCol.TABLE_NAME ||' '||aCol.COLUMN_NAME ||' contains numeric values only');
      end if;
   end loop;
end;

注意,此PL / SQL块的性能将很差。希望这只是一次工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查pandas数据框是否仅包含数字列?

筛选列SQL中仅数字数据的行

数据透视表/ Groupby数据框,其中索引列中的重复项包含非数字数据

如何在熊猫中合并包含数字数据的多列,但忽略空单元格

r-如何用非数字数据分类?

从包含数字数组的对象中异步查找匹配的数字

如果数量字段包含非数字数据,则代码不会禁止提交表单

如何将仅包含数字的数据框中的列拆分为熊猫中的多列

如何删除Pandas数据框中具有仅包含数字的特定列的行?

如何仅将数字保留在也包含字符串的列数据框中?

如何仅淡化包含分类变量的Pandas数据框中的数字列?

matplotlib 数据框 2 列 [日期,非数字数据] 堆积条形图定义属性

在pandas数据框列中查找非数字值

如何访问HTML中的数字数据?

如果包含任何字母表(非数字),如何从熊猫数据框中删除多列?

如何断言仅包含数字dtypes的整个数据框?

如何在Pandas中使用非数字数据进行数据透视表?

TypeScript:过滤数字数组|未定义以仅包含数字不被识别为数字数组

在 desc oder 中对包含字母数字数据的列进行排序

如何保持数字输入作为数字数据类型

R 如何在某些位置扫描带有非数字数据的文本文件?

如何计算缺失和非数字数据,然后用大熊猫绘制

如何绘制非数字数据的日期时间和value_counts()?

仅更改pandas DataFrame中的数字数据

使用Python导入包含文本和数字数据的文件

Pandas 按非数字数据的聚合分组

将 ggplot 与非数字数据一起使用

求和后python pandas重新关联非数字数据

熊猫检测非数字数据类型