如果使用 where 条件更改了列的数据类型,如何查找列的记录

Posted

技术标签:

【中文标题】如果使用 where 条件更改了列的数据类型,如何查找列的记录【英文标题】:How to find records of a column if the data type of a column has been changed using a where condition 【发布时间】:2013-05-21 06:12:45 【问题描述】:

要知道表中列的数据类型是什么,我们使用'desc schema.table_name'。如果特定列的数据类型已从 character 更改为 numeric

如何检查该表中是否有任何具有数据类型字符的记录。

我看到Select distinct column_1 from schema.table_name 给出了该列中所有不同的值

但是我们能否使用where 条件检查'character' 的数据类型是否进入此表?

【问题讨论】:

【参考方案1】:

如果您使用的是 Sql。您可以使用此查询。

select column_name from table_name where column_name not like [0-9]

【讨论】:

【参考方案2】:

如果您使用的是 oracle 服务器,请尝试此查询

SELECT * FROM table_name WHERE  regexp_like(column_name,'[^0-9]+')

【讨论】:

我在使用 Oracle 11g 客户端,在 where 条件之后会抛出错误 我已经在 oracle 11g 中运行了这个查询,它对我来说工作正常。你到底遇到了什么错误?【参考方案3】:

如果你理解正确,你可能想在 mysql 中使用REGEXP

SELECT * 
  FROM table1
 WHERE column1 NOT REGEXP '^[0-9]+$'

SQLFiddle (MySql)

如果是 Oracle,还有 REGEXP_LIKE

SELECT * 
  FROM table1
 WHERE NOT REGEXP_LIKE(column1, '^[0-9]+$')

或者没有REGEXP_LIKE

SELECT * 
  FROM table1
 WHERE LENGTH(TRIM(TRANSLATE (column1, '0123456789',' ')))  IS NOT NULL

SQLFiddle(Oracle 11g)

【讨论】:

我正在使用 Oracle 客户端,它说 REGEXP 是无效的关系运算符 您使用的是 MySql 还是 Oracle RDBMS?

以上是关于如果使用 where 条件更改了列的数据类型,如何查找列的记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 每列的 where 条件

如何根据postgres的jsonb列的where条件(无本机查询)使用jpa在spring boot中选择数据?

如何更改 BigQuery 中列的数据类型

如果它是主键并且被索引,如何更改列的数据类型?

如果满足 COUNT 条件,我可以应用 WHERE 子句吗?

根据 IF 条件更改 WHERE 条件中使用的列