如何只从oracle中选择现有值?

时间:2016-11-22 21:05:10

标签: oracle

我有一张包含大量列的表格。这么多,当我SELECT *时,我甚至看不到任何值,因为所有列都填满了屏幕。我想做这样的事情:

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND <THIS COLUMN> IS NOT NULL

这可能吗? 注意:VALUE不是列。

so many questions on SO提出同样的问题,但它们有一些奇怪的转折,实际的问题没有得到解答。

我试过了:

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE NOT NULL
                                                                     *
Invalid relational operator

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND VALUE <> ''
                                                           *
'VALUE': invalid identifier

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND COLUMN NOT NULL
                                                           *
Missing Expression

奖金问题:

  1. 有没有办法强制Oracle一次只显示一个输出屏幕?
  2. 是否在WHERE子句中使用与当前列相关的变量?例如:WHERE this.column = '1',它会检查每一列以匹配该表达式吗?
  3. 有没有办法在Oracle中取回你的最后一个命令? (我必须远程进入运行Oracle的Linux机器 - 它的所有命令行 - 甚至不能复制/粘贴,所以我必须手动输入每个命令,连接不牢固,所以它&#39 ; s花了很长时间来调试这些东西)

2 个答案:

答案 0 :(得分:2)

如果您尝试查找特定记录的所有非空列值,则可以尝试使用unpivot,前提是您要取消的所有列都具有相同的数据类型:

sudo su

使用上面的代码将排除空值,除非您包含可选的 SELECT * FROM (select * from my_table where name like '%unique value%') UNPIVOT [include nulls] (col_value FOR col_name IN (col1, col2, ..., coln)) 语句,您还需要明确列出您想要忽略的每一列。

如果它们并非都具有相同的数据类型,则可以使用不一定删除所有空值的变体:

include nulls

你可以有一个相当大的一组列组,虽然在这里我只显示三个,每个主要数据类型一个,使用IN列表,你需要为列组中的每一列列出一列,尽管您可以重复使用date_val列所示的列,其中我使用了date1两次。作为重用现有列的替代方法,您可以使用具有空值的虚拟列:

select * 
  from (select * from my_table where name like '%unique value%')
  unpivot ((str_val, num_val, date_val)
  for col_name in ((cola, col1, date1)
                  ,(colb, col2, date2)
                  ,(colc, col3, date1)));

答案 1 :(得分:0)

试过这个吗?

SELECT * FROM my_table WHERE NAME LIKE '%unique name%' AND value IS NOT NULL;

Oracle / PLSQL: IS NOT NULL Condition

对于行号:

SELECT field1, field2, ROW_NUMBER() OVER (PARTITION BY unique_field) R WHERE R=1;

通常在Linux控制台中,您可以使用向上箭头和向下箭头重复最后一句话。