使用“select *”时可以格式化列吗?

时间:2012-12-19 06:00:48

标签: sql oracle

我在oracle db中有这个表,包含100多列:

ID number PK, CREATEDON date, C0 varchar2, C1 varchar2, ... ,c100 varchar2
0, 2012-12-19 05:18:21, 0, 1, ... ,100

我想在CREATEDON格式化的情况下选择它们,所以我写了这个查询:

select *, to_char(CREATEDON, 'YYYY-MM-DD') from SOME_TABLE;

然后它抛出了一个错误:ORA-00923: FROM keyword not found where expected

由于我不想在每个查询中写select ID, to_char(CREATEDON, 'YYYY-MM-DD'), col0, col1,...,col100,我继续尝试另一个:

select a.*, to_char(b.CREATEDON, 'YYYY-MM-DD') from SOME_TABLE a
join SOME_TABLE b on (a.ID = B.ID);

它工作正常,但是当SOME_TABLE中的行增加时,这种连接是否会减慢整个查询的速度?

那么,有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

这看起来像是特定于Oracle的问题。尝试为*运算符指定表格:

select SOME_TABLE.*, to_char(CREATEDON, 'YYYY-MM-DD') from SOME_TABLE;

另见this fiddle

答案 1 :(得分:1)

试试这个......

select a.*, to_char(CREATEDON, 'YYYY-MM-DD') from SOME_TABLE a;

答案 2 :(得分:1)

这是一个特定的oracle问题。问题是当使用通用*运算符时,他们不喜欢您选择任何其他列。

所以建议

select x.*, to_char(CREATEDON, 'YYYY-MM-DD') from SOME_TABLE x;