postgres 多個變數填充字串,字串格式化

2022-02-16 22:44:15 字數 3339 閱讀 1690

參考:

可以使用formt 函式,示例:

select format('424343%s,%s','你好','中國');

-- 424343你好,中國

其中%s 為佔位符,也可以是%l,%i

格式轉換的型別,用於產生格式說明符的輸出。支援下面的型別:

• s將引數值格式化為乙個簡單字串。乙個控制被視為乙個空字串。

• i將引數值視作 sql 識別符號,並在必要時用雙寫引號包圍它。如果引數為空,將會是 乙個錯誤(等同於quote_ident)。

• l將引數值引用為 sql 文字。乙個空值將被顯示為不帶引號的字串null(等同 於quote_nullable)。

函式format根據乙個格式字串產生格式化的輸出,其形式類似於 c 函式sprintf。

format(formatstr text [, formatarg "any" [, ...] ])

formatstr是乙個格式字串,它指定了結果應該如何被格式化。格式字串中的文字被直接 複製到結果中,除了使用格式說明符的地方。格式說明符在字串中扮演著佔位符的角色, 它定義後續的函式引數如何被格式化及插入到結果中。每乙個formatarg引數會被根據其資料 型別的常規輸出規則轉換為文字,並接著根據格式說明符被格式化和插入到結果字串中。

格式說明符由乙個%字元開始並且有這樣的形式

函式和操作符

183%[position][flags][width]type

其中的各元件域是:

position(可選)

乙個形式為n$的字串,其中n是要列印的引數的索引。索引 1 表示formatstr之後的第一 個引數。如果position被忽略,缺省會使用序列中的下乙個引數。

flags(可選)

控制格式說明符的輸出如何被格式化的附加選項。當前唯一支援的標誌是乙個負號 (-),它將導致格式說明符的輸出會被左對齊(left-justified)。除非width域也被 指定,否者這個域不會產生任何效果。

width(可選)

指定用於顯示格式說明符輸出的最小字元數。輸出將被在左部或右部(取決於-標誌)用 空格填充以保證充滿該寬度。太小的寬度設定不會導致輸出被截斷,但是會被簡單地忽 略。寬度可以使用下列形式之一指定:乙個正整數;乙個星號(*)表示使用下乙個函式 引數作為寬度;或者乙個形式為*n$的字串表示使用第n個函式引數作為寬度。

如果寬度來自於乙個函式引數,則引數在被格式說明符的值使用之前就被消耗掉了。如 果寬度引數是負值,結果會在長度為abs(width)的域中被左對齊(如果-標誌被指定)。

type(必需)

格式轉換的型別,用於產生格式說明符的輸出。支援下面的型別:

• s將引數值格式化為乙個簡單字串。乙個控制被視為乙個空字串。

• i將引數值視作 sql 識別符號,並在必要時用雙寫引號包圍它。如果引數為空,將會是 乙個錯誤(等同於quote_ident)。

• l將引數值引用為 sql 文字。乙個空值將被顯示為不帶引號的字串null(等同 於quote_nullable)。

除了以上所述的格式說明符之外,要輸出乙個文字形式的%字元,可以使用特殊序列%%。

下面有一些基本的格式轉換的例子:

select format('hello %s', 'world'); 結果:hello world

select format('testing %s, %s, %s, %%', 'one', 'two', 'three'); 結果:testing one, two, three, %

select format('insert into %i values(%l)', 'foo bar', e'o\'reilly'); 結果:insert into "foo bar" values('o''reilly')

select format('insert into %i values(%l)', 'locations', e'c:\\program files'); 結果:insert into locations values(e'c:\\program files')

下面是使用width域和-標誌的例子:

select format('|%10s|', 'foo'); 結果:| foo|

select format('|%-10s|', 'foo'); 結果:|foo |

函式和操作符

184select format('|%*s|', 10, 'foo'); 結果:| foo|

select format('|%*s|', -10, 'foo'); 結果:|foo |

select format('|%-*s|', 10, 'foo'); 結果:|foo |

select format('|%-*s|', -10, 'foo'); 結果:|foo |

這些例子展示了position域的例子:

select format('testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); 結果:testing three, two, one

select format('|%*2$s|', 'foo', 10, 'bar'); 結果:| bar|

select format('|%1$*2$s|', 'foo', 10, 'bar'); 結果:| foo|

不同於標準的 c 函式sprintf,postgresql的format函式允許將帶有或者不帶有position域的格 式說明符被混在同乙個格式字串中。乙個不帶有position域的格式說明符總是使用最後乙個 被消耗的引數的下乙個引數。另外,format函式不要求所有函式引數都被用在格式字串 中。例如:

select format('testing %3$s, %2$s, %s', 'one', 'two', 'three'); 結果:testing three, two, three

對於安全地構造動態 sql 語句,%i和%l格式說明符特別有用。參見例 42.1

quote_nullable 會將非空字元用單引號括起來:

select quote_nullable('lkl'); -- 'lkl'
quote_indent會將首字母為大寫的字串用雙引號括起來:

select quote_ident('sldfkjl'); --- "sldfkjl"
select format('%l,%i,%i,%s','abc','asd','asd','def')

-- 'abc',asd,"asd",def

多個源檔案共享變數 extern關鍵字

通過使用extern關鍵字,可以在乙個原始檔中定義變數,在其他原始檔中訪問該變數,實現不同源檔案共享變數。即 在test1.cpp中定義變數a並初始化 int a 1 在test1.cpp中定義變數a,其初始值賦為1在test2.cpp宣告外部變數a,就可以直接訪問變數a了 extern int a...

local lua 多個 Lua 變數

lua 變數 變數在使用前,需要在 中進行宣告,即建立該變數。編譯程式執行 之前編譯器需要知道如何給語句變數開闢儲存區,用於儲存變數的值。lua 變數有三種型別 全域性變數 區域性變數 表中的域。lua 中的變數全是全域性變數,那怕是語句塊或是函式裡,除非用 local 顯式宣告為區域性變數。區域性...

宣告變數 如果同時宣告多個變數

如果同時宣告多個變數,可以用以下語句 也可以按如下宣告 dim a as integer,b as integer,c as integer但是不可以按如下宣告 dim a,b,c as integer 如果這樣操作,僅有c宣告正確。如何檢查是否宣告成功呢?可以使用typename函式來判斷。msg...