W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
format
本節(jié)描述了用于檢查和操作字符串值的函數(shù)和操作符。
在這個(gè)環(huán)境中的串包括所有類型character
、character varying
和text
的值。
除非特別說(shuō)明,這些函數(shù)和操作符聲明為接受并返回text
類型。
他們將互換接受character varying
參數(shù)。
在應(yīng)用函數(shù)或操作符之前character
類型的值將被轉(zhuǎn)換為text
,結(jié)果刪除character
值中的任何末尾空格。
SQL定義了一些字符串函數(shù),它們使用關(guān)鍵字,而不是逗號(hào)來(lái)分隔參數(shù)。詳情請(qǐng)見(jiàn)表 9.9,PostgreSQL也提供了這些函數(shù)使用正常函數(shù)調(diào)用語(yǔ)法的版本(見(jiàn)表 9.10)。
由于存在從那些數(shù)據(jù)類型到text
的隱式強(qiáng)制措施,在PostgreSQL 8.3之前,這些函數(shù)也可以接受多種非字符串?dāng)?shù)據(jù)類型。這些強(qiáng)制措施在目前的版本中已經(jīng)被刪除,因?yàn)樗鼈兂3?dǎo)致令人驚訝的行為。不過(guò),字符串串接操作符(||
)仍然接受非字符串輸入,只要至少一個(gè)輸入是一種字符串類型,如表 9.9所示。對(duì)于其他情況,如果你需要復(fù)制之前的行為,可以為text
插入一個(gè)顯式強(qiáng)制措施。
表 9.9. SQL字符串函數(shù)和操作符
函數(shù)/操作符 描述 例子 |
---|
連接兩個(gè)字符串。
|
將非字符串輸入轉(zhuǎn)換為文本,然后將兩個(gè)字符串串聯(lián)在一起。
(非字符串輸入不能為數(shù)組類型,因?yàn)檫@將在
|
檢查字符串是否在指定的 Unicode 規(guī)范化表單中。
可選的
|
返回字符串中的位數(shù)(8倍于
|
返回字符串中的字符數(shù)。
|
根據(jù)數(shù)據(jù)庫(kù)的語(yǔ)言環(huán)境規(guī)則,將字符串轉(zhuǎn)換為全部小寫(xiě)。
|
將字符串轉(zhuǎn)換為指定的Unicode規(guī)范化形式。
可選的
|
返回字符串的字節(jié)數(shù)。
|
返回字符串中的字節(jié)數(shù)。 由于此版本的函數(shù)直接接受
|
替換
|
返回指定的
|
如果已指定,提取
|
提取匹配POSIX正則表達(dá)式的子字符串; 參見(jiàn) 第 9.7.3 節(jié)。
|
提取匹配 SQL 正則表達(dá)式的字串;參見(jiàn) 第 9.7.2 節(jié)。
|
從
|
這是一個(gè)非標(biāo)準(zhǔn)的
|
根據(jù)數(shù)據(jù)庫(kù)的定位規(guī)則,將字符串轉(zhuǎn)換為所有大寫(xiě)。
|
還有額外的串操作函數(shù)可以用,它們?cè)诒?nbsp;9.10中列出。它們有些在內(nèi)部用于實(shí)現(xiàn)表 9.9列出的SQL標(biāo)準(zhǔn)字符串函數(shù)。
表 9.10. 其他字符串函數(shù)
函數(shù) 描述 例子 |
---|
返回參數(shù)的第一個(gè)字符的數(shù)字代碼。在UTF8編碼中,返回該字符的Unicode代碼點(diǎn)。 在其他多字節(jié)編碼中,該參數(shù)必須是一個(gè)ASCII字符。
|
從
|
返回給定代碼的字符。在UTF8編碼中該參數(shù)被視作一個(gè)Unicode代碼點(diǎn)。
在其他多字節(jié)編碼中該參數(shù)必須指定一個(gè)ASCII字符。
|
連接所有參數(shù)的文本表示??諈?shù)被忽略。
|
用分隔符連接除第一個(gè)參數(shù)外的所有參數(shù)。第一個(gè)參數(shù)用作分隔符字符串,不應(yīng)為NULL。其他NULL參數(shù)將被忽略。
|
根據(jù)格式字符串對(duì)參數(shù)進(jìn)行格式化;參見(jiàn) 第 9.4.1 節(jié)。
這個(gè)函數(shù)類似于C函數(shù)
|
將每個(gè)單詞的第一個(gè)字母轉(zhuǎn)換為大寫(xiě),其余字母轉(zhuǎn)換為小寫(xiě)。單詞是由非字母數(shù)字字符分隔的字母數(shù)字字符序列。
|
以字符串返回第一個(gè)
|
返回字符串中的字符數(shù)。
|
將
|
從
|
計(jì)算參數(shù)的 MD5 hash ,結(jié)果以十六進(jìn)制形式寫(xiě)入。
|
將
|
返回當(dāng)前客戶端編碼名稱。
|
返回適合引用的給定字符串,作為SQL語(yǔ)句字符串中的標(biāo)識(shí)符。 只有在必要的情況下才添加引號(hào)(例如,如果字符串包含非標(biāo)識(shí)符字符或?qū)⒈淮笮?xiě)折疊)。 嵌入的引號(hào)被適當(dāng)?shù)丶与p引號(hào)。參見(jiàn)例 42.1。
|
返回在SQL語(yǔ)句字符串中適當(dāng)引用的給定字符串,用作字符串文字使用。
嵌入式單引號(hào)和反斜線適當(dāng)?shù)姆?轉(zhuǎn)雙引號(hào)或雙斜線)。
請(qǐng)注意,
|
將給定的值轉(zhuǎn)換為文本,然后將其作為字面量引用。 內(nèi)嵌的單引號(hào)和反斜杠被適當(dāng)?shù)胤丁?
|
返回在SQL語(yǔ)句字符串中適當(dāng)引用的給定字符串文字;或者,如果參數(shù)為null,則返回
|
將給定值轉(zhuǎn)換為文本,然后將其作為字面量引用;或者,如果參數(shù)為null,則返回
|
返回從POSIX正則表達(dá)式到
|
返回通過(guò)將POSIX正則表達(dá)式與
|
替換匹配POSIX正則表達(dá)式的子字符串;參見(jiàn) 第 9.7.3 節(jié)。
|
使用POSIX正則表達(dá)式作為分隔符拆分
|
使用POSIX正則表達(dá)式作為分隔符拆分
|
重復(fù)
|
將
|
顛倒字符串中字符的順序。
|
返回字符串中的最后
|
擴(kuò)展
|
從
|
在
|
返回在
|
提取
|
如果
|
將
|
將數(shù)字轉(zhuǎn)換為其相應(yīng)的十六進(jìn)制表示形式。
|
將
|
concat
、concat_ws
和format
函數(shù)是可變的,因此可以把要串接或格式化的值作為一個(gè)標(biāo)記了VARIADIC
關(guān)鍵字的數(shù)組進(jìn)行傳遞(見(jiàn)第 37.5.5 節(jié))。
數(shù)組的元素被當(dāng)作函數(shù)的獨(dú)立普通參數(shù)一樣處理。如果可變數(shù)組參數(shù)為 NULL,concat
和concat_ws
返回 NULL,但format
把 NULL 當(dāng)作一個(gè)零元素?cái)?shù)組。
還可以參閱第 9.21 節(jié)中的string_agg
,以及表 9.13中的字符串和bytea
類型之間轉(zhuǎn)換的功能。
format
函數(shù)format
根據(jù)一個(gè)格式字符串產(chǎn)生格式化的輸出,其形式類似于 C 函數(shù)sprintf
。
format
( formatstr text [, formatarg "any" [, ...] ])
formatstr
是一個(gè)格式字符串,它指定了結(jié)果應(yīng)該如何被格式化。格式字符串中的文本被直接復(fù)制到結(jié)果中,除了使用格式說(shuō)明符的地方。格式說(shuō)明符在字符串中扮演著占位符的角色,它定義后續(xù)的函數(shù)參數(shù)如何被格式化及插入到結(jié)果中。每一個(gè)formatarg
參數(shù)會(huì)被根據(jù)其數(shù)據(jù)類型的常規(guī)輸出規(guī)則轉(zhuǎn)換為文本,并接著根據(jù)格式說(shuō)明符被格式化和插入到結(jié)果字符串中。
格式說(shuō)明符由一個(gè)%
字符開(kāi)始并且有這樣的形式
%[position][flags][width]type
其中的各組件域是:
position
(可選)
一個(gè)形式為
的字符串,其中n
$n
是要打印的參數(shù)的索引。索引 1 表示formatstr
之后的第一個(gè)參數(shù)。如果position
被忽略,默認(rèn)會(huì)使用序列中的下一個(gè)參數(shù)。
flags
(可選)
控制格式說(shuō)明符的輸出如何被格式化的附加選項(xiàng)。當(dāng)前唯一支持的標(biāo)志是一個(gè)負(fù)號(hào)(-
),它將導(dǎo)致格式說(shuō)明符的輸出會(huì)被左對(duì)齊(left-justified)。除非width
域也被指定,否者這個(gè)域不會(huì)產(chǎn)生任何效果。
width
(可選)
指定用于顯示格式說(shuō)明符輸出的最小字符數(shù)。輸出將被在左部或右部(取決于-
標(biāo)志)用空格填充以保證充滿該寬度。太小的寬度設(shè)置不會(huì)導(dǎo)致輸出被截?cái)?,但是?huì)被簡(jiǎn)單地忽略。寬度可以使用下列形式之一指定:一個(gè)正整數(shù);一個(gè)星號(hào)(*
)表示使用下一個(gè)函數(shù)參數(shù)作為寬度;或者一個(gè)形式為*
的字符串表示使用第n
$n
個(gè)函數(shù)參數(shù)作為寬度。
如果寬度來(lái)自于一個(gè)函數(shù)參數(shù),則參數(shù)在被格式說(shuō)明符的值使用之前就被消耗掉了。如果寬度參數(shù)是負(fù)值,結(jié)果會(huì)在長(zhǎng)度為abs
(width
)的域中被左對(duì)齊(如果-
標(biāo)志被指定)。
type
(必需)格式轉(zhuǎn)換的類型,用于產(chǎn)生格式說(shuō)明符的輸出。支持下面的類型:
s
將參數(shù)值格式化為一個(gè)簡(jiǎn)單字符串。一個(gè)控制被視為一個(gè)空字符串。
I
將參數(shù)值視作 SQL 標(biāo)識(shí)符,并在必要時(shí)用雙寫(xiě)引號(hào)包圍它。如果參數(shù)為空,將會(huì)是一個(gè)錯(cuò)誤(等效于quote_ident
)。
L
將參數(shù)值引用為 SQL 文字。一個(gè)空值將被顯示為不帶引號(hào)的字符串NULL
(等效于quote_nullable
)。
除了以上所述的格式說(shuō)明符之外,要輸出一個(gè)文字形式的%
字符,可以使用特殊序列%%
。
下面有一些基本的格式轉(zhuǎn)換的例子:
SELECT format('Hello %s', 'World');
結(jié)果:Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');
結(jié)果:Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');
結(jié)果:INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files');
結(jié)果:INSERT INTO locations VALUES(E'C:\\Program Files')
下面是使用width
域和-
標(biāo)志的例子:
SELECT format('|%10s|', 'foo');
結(jié)果:| foo|
SELECT format('|%-10s|', 'foo');
結(jié)果:|foo |
SELECT format('|%*s|', 10, 'foo');
結(jié)果:| foo|
SELECT format('|%*s|', -10, 'foo');
結(jié)果:|foo |
SELECT format('|%-*s|', 10, 'foo');
結(jié)果:|foo |
SELECT format('|%-*s|', -10, 'foo');
結(jié)果:|foo |
這些例子展示了position
域的例子:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three');
結(jié)果:Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar');
結(jié)果:| bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar');
結(jié)果:| foo|
不同于標(biāo)準(zhǔn)的 C 函數(shù)sprintf
,PostgreSQL的format
函數(shù)允許將帶有或者不帶有position
域的格式說(shuō)明符被混在同一個(gè)格式字符串中。一個(gè)不帶有position
域的格式說(shuō)明符總是使用最后一個(gè)被消耗的參數(shù)的下一個(gè)參數(shù)。另外,format
函數(shù)不要求所有函數(shù)參數(shù)都被用在格式字符串中。例如:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
結(jié)果:Testing three, two, three
對(duì)于安全地構(gòu)造動(dòng)態(tài) SQL 語(yǔ)句,%I
和%L
格式說(shuō)明符特別有用。參見(jiàn)例 42.1。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: