无法搜索不同类型的所有列

时间:2015-07-14 10:07:28

标签: sql oracle unpivot

这个看起来像一个古老的问题但实际上并非如此。我无法在SO或其他地方找到答案。

我有这张桌子:

n (number) | s (varchar2)
-------------------------
200        | some string
201        | some other string

我可以将数字n 转换为字符串并选择它而不会出现这样的问题:

SELECT n FROM t;
SELECT TO_CHAR(n) FROM t;

但我需要在所有列中搜索字符串值。我尝试过的(它通常起作用,意味着数据库是 11g )是UNPIVOT

SELECT * FROM t UNPIVOT (anywhere FOR col IN (...));

然而, NOT 工作的是混合数据类型(数字和基于字符的类型,如varchar2)。我得到的是:

  

ORA-01790:表达式必须与对应的表达式具有相同的数据类型

没关系,我理解这一点,解决方案很明显。将数字转换为字符。但这也不起作用。立即解决方案:

SELECT * FROM t UNPIVOT (anywhere FOR col IN (s, TO_CHAR(n)));
                                                        ^

我收到了这个意外错误:

  

ORA-00917:缺少逗号

此处的问题是TO_CHAR根本不会被解释为函数,它被认为是列名sn

那么,如何将UNPIVOT用于混合数据类型如何将所有列投射到varchar2 我还能如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试使用:

SELECT * 
  FROM (SELECT to_char(n) as n, s FROM t) 
UNPIVOT (anywhere FOR col IN (...));