如何获取列名列表

57 sqlite

可以获取包含表的所有列名的行,如下所示:

|id|foo|bar|age|street|address|
Run Code Online (Sandbox Code Playgroud)

我不喜欢用Pragma table_info(bla).

Kon*_*kus 88

SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
Run Code Online (Sandbox Code Playgroud)

然后使用Reg Exp(很容易)解析这个值,它看起来类似于: [(.*?)]

或者你可以使用:

PRAGMA table_info(table_name)
Run Code Online (Sandbox Code Playgroud)

  • `然后用Reg Exp解析这个值(这很容易)......`真的很模糊,用正则表达式获取列defs的查询的完整示例在这里已经走了很长的路. (7认同)

Ger*_*ero 32

如果您.headers on在执行查询之前使用命令行shell到SQLite .您只需要在给定的会话中执行此操作一次.

  • 对于那些想要获得他们习惯用其他SQL shell看到的典型SELECT输出格式的人来说,使用`.mode column`和`.headers on`. (9认同)

Owe*_*ing 9

是的,您可以使用以下命令实现此目的:

sqlite> .headers on
sqlite> .mode column
Run Code Online (Sandbox Code Playgroud)

在您的表上选择的结果将如下所示:

id          foo         bar         age         street      address
----------  ----------  ----------  ----------  ----------  ----------
1           val1        val2        val3        val4        val5
2           val6        val7        val8        val9        val10
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以在 sqlite 中使用 pragma 相关命令,如下所示

pragma table_info("table_name")
--Alternatively
select * from pragma_table_info("table_name")
Run Code Online (Sandbox Code Playgroud)

如果您需要像 那样的列名id|foo|bar|age|street|address,基本上您的答案就在下面的查询中。

select group_concat(name,'|') from pragma_table_info("table_name")
Run Code Online (Sandbox Code Playgroud)


Gee*_*tra 6

这有助于HTML5 SQLite:

tx.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "your_table_name";', [], function (tx, results) {
  var columnParts = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').split(','); ///// RegEx
  var columnNames = [];
  for(i in columnParts) {
    if(typeof columnParts[i] === 'string')
      columnNames.push(columnParts[i].split(" ")[0]);
  }
  console.log(columnNames);
  ///// Your code which uses the columnNames;
});
Run Code Online (Sandbox Code Playgroud)

您可以使用您的语言重用正则表达式来获取列名称.

更短的选择:

tx.executeSql('SELECT name, sql FROM sqlite_master WHERE type="table" AND name = "your_table_name";', [], function (tx, results) {
  var columnNames = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').replace(/ [^,]+/g, '').split(',');
  console.log(columnNames);
  ///// Your code which uses the columnNames;
});
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这两个解决方案都假设SQLITE_MASTER表的`sql`字段中没有任何额外的空格或其他空格.由于此字段包含用于创建表的文字查询文本,因此并非总是如此.我也认为它不能正确处理包含空格的字段名称. (2认同)