这取决于你想要完成的任务了一下。此作品:
select substr(column4, 0, 5), t1.* from sometable t1;
但是,它返回第4列两次。一次使用5个字符(如果您想放弃最后5个字符而不是使用固定长度,不清楚您的目标是什么),并使用所有字符,则使用5个字符的长度。
您也可以使用user_tab_columns使用PL/SQL生成SQL。如果你只是想给自己节省一些打字这样的事情可能工作:
declare
v_sql varchar2(1024) := null;
begin
for rec in (select column_name, table_name from user_tab_columns
where table_name = 'TEST1') loop
if v_sql is null then
v_sql := 'select ';
else
v_sql := v_sql || ',';
end if;
if rec.column_name = 'C2' then
v_sql := v_sql || ' substr(' || rec.table_name || '.c2, 0, 5)';
else
v_sql := v_sql || rec.table_name || '.' || rec.column_name;
end if;
end loop;
v_sql := v_sql || ' from test1';
dbms_output.put_line(v_sql);
end;
/
没有点代码风格,但它的工作原理和打印SQL。如果需要截断多个列并根据需要添加其他表,请添加更多特殊情况。
不要懒,请全部指定! (但是你可以跳过这种情况,只是简单地做一下子串部分。) – jarlh
@jar表中有超过20个列和超过10个表。我至少需要指定200列。没有更好的方法吗? –
它可能有点痛苦,但总是喜欢列列表,[select * vs select column](http://stackoverflow.com/questions/3180375/select-vs-select-column) –