2012-07-14 100 views
3

我想修改名称列并使其小写,但我也想选择所有其他列。有没有办法做到这一点,而不必写每个列的名称。我怎么能....选择*,lcase(名称)AS名称从表

我试图做这样的事情:

SELECT *, lcase(name) AS name FROM table; 

而不是写出来的所有列名,像这样的:

SELECT lcase(name) AS name, zip, address, age, birthday, etc FROM table; 

这可能吗?

+0

好问题! +1 – aleroot 2012-07-14 07:14:29

回答

0

您的代码段就这样工作!虽然select *被认为是不好的形式,并可能是一个性能问题。

您也可能更愿意使用一个表的别名,以使其更清晰:

SELECT t.*, lcase(t.name) AS name FROM table t; 
+1

我认为这个答案很好..只需给lcase另一个名称,如“lcase(t.name)AS lower_name”,以避免与系统混淆。 – 2012-07-14 07:17:27

0

没有,没有符号选择除一除明确列出所有列的所有列。

(其实这是可以使用动态SQL,但你真的不想这样做。)

1

你不能,而是一个选择是使用一种观点:

create view table_with_lower_name as 
select lcase(name) AS name, zip, address, age, birthday, etc 
from table; 
使用视图时

select * from table_with_lower_name; 

有一些注意事项,比如你不能更新修饰的:

一旦定义(即这是一次性的创建语句),你可以简单地使用通过它们列(例如name),但它可能适用于您。

+0

+1不幸的是,没有像'SELECT(* EXCEPT name)...'这样的语法,但我相信这最好的回答了这个问题,尽管这是一种解决方法,但它并不是一件好事。问题是,如果你想用很多不同的查询来做到这一点,你必须为每个查询创建一个视图,这肯定会比如果你只是平坦地指定所有列在查询中名称正确(无论如何,这实际上是更好的练习)。 – 2012-07-14 07:17:07