无法在不同类型的所有列中搜索
Cannot search in all columns of differing types
这个看起来像一个老问题,但实际上不是。我无法在 SO 或其他地方找到答案。
我有这个 table:
n (number) | s (varchar2)
-------------------------
200 | some string
201 | some other string
我可以 cast 数字 n
到一个字符串并且 select 它没有像这样的问题:
SELECT n FROM t;
SELECT TO_CHAR(n) FROM t;
但我需要在所有列中搜索字符串值。我尝试过的(它通常有效,这意味着数据库是 11g)是 UNPIVOT
:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (...));
但是,NOT 的作用是混合数据类型(数字和基于字符的类型,例如 varchar2
)。我得到的是:
ORA-01790: expression must have same datatype as corresponding expression
没关系,我明白这一点,解决方案很明显。将数字投射到字符。但这也不管用。即时解决方案:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (s, TO_CHAR(n)));
^
我收到这个意外错误:
ORA-00917: missing comma
这里的问题是 TO_CHAR
根本没有被解释为函数,它被认为是像 s
或 n
.
这样的列名
那么,如何将 UNPIVOT
与混合数据类型一起使用 or 如何将所有列转换为 varchar2
or 我还能怎样解决这个问题?
尝试使用:
SELECT *
FROM (SELECT to_char(n) as n, s FROM t)
UNPIVOT (anywhere FOR col IN (...));
这个看起来像一个老问题,但实际上不是。我无法在 SO 或其他地方找到答案。
我有这个 table:
n (number) | s (varchar2)
-------------------------
200 | some string
201 | some other string
我可以 cast 数字 n
到一个字符串并且 select 它没有像这样的问题:
SELECT n FROM t;
SELECT TO_CHAR(n) FROM t;
但我需要在所有列中搜索字符串值。我尝试过的(它通常有效,这意味着数据库是 11g)是 UNPIVOT
:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (...));
但是,NOT 的作用是混合数据类型(数字和基于字符的类型,例如 varchar2
)。我得到的是:
ORA-01790: expression must have same datatype as corresponding expression
没关系,我明白这一点,解决方案很明显。将数字投射到字符。但这也不管用。即时解决方案:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (s, TO_CHAR(n)));
^
我收到这个意外错误:
ORA-00917: missing comma
这里的问题是 TO_CHAR
根本没有被解释为函数,它被认为是像 s
或 n
.
那么,如何将 UNPIVOT
与混合数据类型一起使用 or 如何将所有列转换为 varchar2
or 我还能怎样解决这个问题?
尝试使用:
SELECT *
FROM (SELECT to_char(n) as n, s FROM t)
UNPIVOT (anywhere FOR col IN (...));