Select

sqlite3 有沒有辦法將所有列的 .width 設置為等於列標題的寬度?

  • May 11, 2020

我在用:

  • SQLite 版本 3.21.0

我希望美化我的SQLite SELECT shell 輸出(本質上是為了讓它更易於閱讀)。這個答案對我幫助很大。

不過,現在我想知道是否有辦法:

  1. 將列寬設置為完全等於其標題的寬度?我瀏覽了文件的相應部分——它提到的最接近的是.width 0,其效果解釋如下:

如果將列寬指定為 0,則列寬會自動調整為三個數字中的最大值:10、表頭寬度和第一行數據的寬度。

如果它只是“兩個數字中的最大值:10 和標題的寬度” - 這足以滿足我的需求,但*“……以及第一行數據的寬度”。*為我破壞它。 2. 有沒有辦法在事先不知道有多少列的情況下將所有列的寬度設置為相同?例如,我不想.width 5 5 5為 3-column做一些事情,而是做一些類似的事情。SELECT``.width all 5

shell 設計得很簡單,因此sqlite3定制機制有限。

沒有以這種方式修改寬度的內置方法。

您必須修改 shell 的原始碼,或者使用一些用腳本語言編寫的替代 shell 。

您可以使用 .width 的組合,並使用用空格填充的別名。

優點是您在查詢中只為那些需要額外寬度的列動態調整寬度,而其餘列繼續使用自動調整寬度。

所有列都將使用基於 sqlite 文件寬度規則的自動調整寬度:

如果將列寬指定為 0,則列寬會自動調整為三個數字中的最大值:10、表頭寬度和第一行數據的寬度。這使得列寬可以自我調整。每列的預設寬度設置是這個自動調整的 0 值。

假設您的表“my_table”具有“名稱”、“年齡”和“地址”列。您有興趣展示:

  1. “名稱”:前 3 個字元
  2. “年齡”:自動調整
  3. “地址”:前 30 個字元

您的查詢將是:

.mode columns
.width 3 0 0
.headers on


CREATE TABLE my_table (name TEXT, age INTEGER, address TEXT);

INSERT INTO my_table VALUES ("short name",
22, "my house");

INSERT INTO my_table VALUES ("my name is very long",
22, "i live in my house somewhere in the planet Earth");

SELECT name AS "name                ",
age,
address AS "address                       "
FROM my_table;

你的輸出:

nam  age         address                       
---  ----------  ------------------------------
sho  22          my house                      
my   22          i live in my house somewhere i

引用自:https://dba.stackexchange.com/questions/212412