SQL按字母顺序列出所有列名

Sha*_*fiz 19 sql sorting alphabetical

我知道

SELECT * FROM Table
Run Code Online (Sandbox Code Playgroud)

将列出表中的所有列,但我有兴趣按字母顺序列出列.

说,我有三个栏目,"名字","年龄"和"性别".

我希望以格式组织列

|age| |name| |sex|
Run Code Online (Sandbox Code Playgroud)

是否可以使用SQL执行此操作?

pax*_*blo 13

是的,没有:-)

SQL本身并不关心列的出现顺序,但是,如果您要使用:

select age, name, sex from ...
Run Code Online (Sandbox Code Playgroud)

你会发现它们可能按照这个顺序出现(尽管我不确定SQL标准是否要求这样做).

现在你可能不想这样做,但有时生活不公平:-)

您还可以使用DBMS数据定义表动态构建查询.这是不可移植的,但大多数DBMS都提供这些表(例如DB/2 SYSIBM.SYSCOLUMNS),您可以按顺序从那里选择列名.就像是:

select column_name from sysibm.syscolumns
where owner = 'pax' and table_name = 'movies'
order by column_name;
Run Code Online (Sandbox Code Playgroud)

然后你使用的结果查询构建真正的查询:

query1 = "select column_name from sysibm.syscolumns" +
         " where owner = 'pax' and table_name = 'movies'" +
         " order by column_name"
rs = exec(query1)
query2 = "select"
sep = " "
foreach colm in rs:
    query2 += sep + colm["column_name"]
    sep = ", "
query2 += " from movies order by rating"
rs = exec(query2)
// Now you have the rs recordset with sorted columns.
Run Code Online (Sandbox Code Playgroud)

但是,您真的应该批判性地检查所有选择的查询*- 在绝大多数情况下,它是不必要的和低效的.数据的表示可能应该由表示层完成,而不是DBMS本身 - 应该留下DBMS以尽可能有效的方式返回数据.

  • 我同意这一点,永远不要在生产代码中使用 *。您永远不知道什么时候有人会添加一些不应列出的列,例如出于安全考虑。始终构建查询以仅获取您需要的列。如果你想动态地这样做,但一定要非常明显地注意这一点,让其他开发人员看到。 (2认同)

May*_*pka 12

这将生成一个查询,其中所有列在select语句中按字母顺序排序.

DECLARE @QUERY VARCHAR(2000)
DECLARE @TABLENAME VARCHAR(50) = '<YOU_TABLE>'

SET @QUERY = 'SELECT '
SELECT @QUERY = @QUERY + Column_name + ', 
'
  FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = @TABLENAME
 ORDER BY Column_name

SET @QUERY =  LEFT(@QUERY, LEN(@QUERY) - 4) + ' 
FROM '+ @TABLENAME

PRINT @QUERY
EXEC(@QUERY)
Run Code Online (Sandbox Code Playgroud)

  • 为我工作,使用此修订版将Left语句(len) - 4更改为-1 (2认同)