PostgreSQL函數和運算符(一)

分類: PostgreSQL2011-03-17 09:14 3404人閱讀 評論(1) 收藏 舉報

目錄(?)[+]

    PostgreSQL爲內置數據類型提供了大量的函數和運算符。用戶也可以定義自己的函數(參考第11章)。在psql中執行命令/df/do可以分別列出可用的函數和運算符的列表。

       本章中的大部分函數和運算符都是SQL標準中定義的,也有一部分是PostgreSQL自己擴展的。SQL標準定義了一些有特殊語法的字符串函數,這些函數使用特殊關鍵字而不是逗號來分隔參數,例如from和for。

7.1 邏輯運算符

   常用的邏輯運算符有:

AND

OR

NOT

   SQL 使用三值的布爾邏輯,空值代表"unknown"。 下面邏輯運算符的真值表:

a

b

a AND b

a OR b

TRUE

TRUE

TRUE

TRUE

TRUE

FALSE

FALSE

TRUE

TRUE

NULL

NULL

TRUE

FALSE

FALSE

FALSE

FALSE

FALSE

NULL

FALSE

NULL

NULL

NULL

NULL

NULL

a

NOT a

 

TRUE

FALSE

 

FALSE

TRUE

 

NULL

NULL

 

         

 

      運算符 AND 和 OR 滿足交換律。

 

7.2 比較運算符

    表 7-1 列出了所有的比較運算符。

表7-1 比較運算符

運算符

描述

<

小於

>

大於

<=

小於或等於

>=

大於或等於

=

等於

<> 或 !=

不等於

    注意: != 運算符在進行此法分析時會被自動轉換成 <>。所以不可能讓!= 和 <> 實現不同的功能。

    比較運算符可以用於所有可以進行比較的操作的數據類型。所有比較運算符都是二元運算符,返回 boolean類型的結果,類似“1 < 2 < 3” 這樣的表達式是非法的。

    除了比較運算符,還可以使用 BETWEEN謂詞。 a BETWEEN x AND y 等價於

a >= x AND a <= y類似地,a NOT BETWEEN x AND 等價於 a < x OR a > y

這兩種形式之間沒有什麼區別。使用BETWEEN謂詞時要注意,AND左邊的操作數應該小於或等於它右邊的操作數,否則可能會得到意想不到的結果,例如:

(1)select 3 between 4 and 2;

 ?column?

----------

 f                  --結果爲假

(1 row)

(2)select 3 between 2 and 4;

 ?column?

----------

 t                 --結果爲真

(1 row)

 

    BETWEEN SYMMETRICBETWEEN的功能類似,但是在使用BETWEEN SYMMETRIC時,AND運算符左邊的操作數不一定要小於或者等於它右邊的操作數。例如:

(1)select 3 between symmetric 2 and 4;

 ?column?

----------

 t                --結果爲真

(1 row)

(2)select 3 between symmetric 4 and 2;

 ?column?

----------

 t               --結果爲真

(1 row)

   要檢查一個值是否是空值,使用下面的語法:

expression IS NULL

expression IS NOT NULL

或者使用下面的等價的但並不標準的語法

expression ISNULL

expression NOTNULL

不能寫成expression = NULL因爲兩個空值是不相等的。空值代表一個未知的數值,因此無法決定兩個未知的數值是否相等,這個規則符合SQL 標準。

 

注意:如果表達式返回一個複合數據類型的值,只有在這個值是空值或者這個值的所有域都是空值的情況下,IS NULL才返回“真”。只有在這個值不是空值和這個值的所有域的值都不是空值的情況下,IS NOT NULL才返回“真”。這個規則是SQL標準定義的。

 

    如果有任何一個操作數是空值,普通的比較運算符的運算結果也是空值(表示"未知")。

    還可以用IS [NOT] DISTINCT FROM 來比較兩個表達式的值,語法如下:

expression IS DISTINCT FROM expression

expression IS NOT DISTINCT FROM expression

    如果兩個表達式都不是空值,IS DISTINCT FROM的功能與運算符“<>”完全相同。 但是,假如兩個表達式的值都是空值,IS DISTINCT FROM將返回“假”,而如果只有一個表達式的值是空值,那麼它將返回“真”。

    如果兩個表達式都不是空值,IS NOT DISTINCT FROM的功能與運算符“=”完全相同。但是,假如兩個表達式的值都是空值,IS NOT DISTINCT FROM將返回“真“,而如果只有一個表達式的值是空值,那麼它將返回“假”。

    可以使用下面的謂詞來測試布爾類型的數值:

expression IS TRUE

expression IS NOT TRUE

expression IS FALSE

expression IS NOT FALSE

expression IS UNKNOWN

expression IS NOT UNKNOWN

 上面的謂詞總是返回真或假,從來不返回空值。空值輸入被當做邏輯數值"未知"UNKNOWN。注意IS UNKNOWNIS NOT UNKNOWN分別與IS NULLIS NOT NULL相同,只是輸入表達式必須是布爾類型的。

 

7.3 數學函數和運算符

   PostgreSQL爲許多類型提供了數學運算符。表 7-2 列出了所有的數學運算符。

 7-2. 數學運算符

運算符

描述

例子

結果

+

2 + 3

5

-

2 - 3

-1

*

2 * 3

6

/

除 (兩個整數相除的結果如果不是整數,會將結果的小數部分去掉,只保留整數部分)

(1)4 / 2

(2)3/2

(3)2/4

(1)2

(2)1

(3)0

%

模除 (求餘)

5 % 4

1

^

冪(指數運算)

2.0 ^ 3.0

8

|/

平方根

|/ 25.0

5

||/

立方根

||/ 27.0

3

!

階乘

5 !

120

!!

階乘 (前綴運算符)

!! 5

120

@

絕對值

@ -5.0

5

&

按位 AND

91 & 15

11

|

按位OR

32 | 3

35

#

按位XOR

17 # 5

20

~

按位NOT

~1

-2

<<

按位左移

1 << 4

16

>>

按位右移

8 >> 2

2

      

按位運算運算符只能用於整數類型的數據,而其它的運算符可以用於所有的數值類型的數據。按位運算的運算符還可以用於位串類型 bit 和 bit varying,如表7-3所示。

        表7-3列出了所有的數學函數。在該表中dp表示double precision,除非特別指明,函數的返回值的數據類型和它的參數的數據類型相同。表7-4列出了這些數學函數的實例。處理 double precision 數據的函數大多數是在操作系統的C函數庫的基礎上實現的。

7-3. 數學函數

函數

返回值類型

描述

abs(x)

x類型相同

絕對值

cbrt(dp)

Dp

立方根

ceil(dp 或者 numeric)

與輸入相同

不小於參數的最小的整數

ceiling(dp or numeric)

與輸入相同

不小於參數的最小整數(ceil 的別名)

degrees(dp)

dp

把弧度轉爲角度

exp(dp 或 numeric)

與輸入相同

自然指數

floor(dp 或 numeric)

與輸入相同

不大於參數的最大整數

ln(dp 或 numeric)

與輸入相同

自然對數

log(dp 或 numeric)

與輸入相同

10 爲底的對數

log(b numeric, x numeric)

numeric

指定底數的對數

mod(y, x)

和參數類型相同

除法 y/x 的餘數(模)

pi()

Dp

"π" 常量

power(a dp, b dp)

Dp

求a的 b 次冪

power(a numeric, b numeric)

numeric

求a的 b 次冪

radians(dp)

Dp

把角度轉爲弧度

random()

Dp

0.0 到 1.0 之間的隨機數值

round(dp 或者 numeric)

與輸入相同

約爲最接近參數的整數

round(v numeric, s int)

Numeric

約爲最接近參數的有s位小數的數字

setseed(dp)

Int

爲以後被調用的 random()函數設置種子

sign(dp 或者 numeric)

和輸入相同

參數的符號(-1, 0, +1)

sqrt(dp 或者 numeric)

和輸入相同

平方根

trunc(dp 或者 numeric)

和輸入相同

去掉參數的小數位

trunc(v numeric, s int)

Numeric

將參數截斷爲含有 s位小數的數字

width_bucket(op numeric, b1 numeric, b2 numeric, count in)

Int

將b1和b2平分成count個取值區間,取值區間的編號從1開始。

 

如果b1>b2,則編號爲0的取值區間表示的範圍是(b1,正無窮大),編號爲count+1的取值區間表示的範圍是(負無窮大,b2)。

 

如果b1<b2,則編號爲0的取值區間表示的範圍是(負無窮大,b1),編號爲count+1的取值區間表示的範圍是(b2,負無窮大)。

 

若op落在某個取值區間內,則返回該取值區間的編號。

width_bucket(op dp, b1 dp, b2 dp, count int)

Int

函數功能同上

7-4. 數學函數實例

例子

結果

abs(-17.4)

17.4

cbrt(27.0)

3

ceil(-42.8)

-42

ceiling(-95.3)

-95

degrees(0.5)

28.6478897565412

exp(1.0)

2.71828182845905

floor(-42.8)

-43

ln(2.0)

0.693147180559945

log(100.0)

2

log(2.0, 64.0)

6.0000000000

mod(9,4)

1

pi()

3.14159265358979

power(9.0, 3.0)

729

power(9.0, 3.0)

729

radians(45.0)

0.785398163397448

random()

每次調用的結果是隨機的,例如0.453876388259232

(1)round(42.4)

(2)round(42.8)

(1)42

(2)43

(1)round(42.4382, 2)

(2)round(42.4322,2)

(1)42.44

(2)42.43

setseed(0.54823)

1177314959

sign(-8.4)

-1

sqrt(2.0)

1.4142135623731

trunc(42.8)

42

(1)trunc(42.4382, 2)

(2)trunc(42,2)

(1)42.43

(2)42.00

(1)width_bucket(0.7,1,4,2);

 

(2)width_bucket(10,1,4,2);

 

(3)width_bucket(10,4,1,2);

 

(3)width_bucket(3,4,1,2);

(1)0

 

(2)3

 

(3)0

 

(4)1

width_bucket(0.35, 0.024, 10.06, 5)

1

 

   7-5列出了所有的三角函數。所有三角函數的參數類型和返回值的類型都是double precision

7-5. 三角函數

函數

描述

acos(x)

反餘弦

asin(x)

反正弦

atan(x)

反正切

atan2(xy)

正切 y/x 的反函數

cos(x)

餘弦

cot(x)

餘切

sin(x)

正弦

tan(x)

正切

 

 

7.4 字符串函數和運算符

       本節描述用處檢查和處理字符串數值的函數和運算符。字符串類型包括類型 charactercharacter varying和 text/除非另外說明,所有下面列出的函數都可以處理這些數據類型,在處理character 類型的時候,要注意它的自動空格填充機制對運算結果的影響。有些函數還可以處理位串類型的數據。表 7-6列出了SQL字符串函數和運算符,表 7-7列出了使用這些運算符的實例。

 7-6. SQL字符串函數和運算符

     函數或運算符

返回值類型

描述

String || string

text

連接兩個字符串

String || non-string   或

 non-string || string

text

連接一個字符串和另一個非字符串類型的值

bit_length(string)

int

字符串包含的二進制位的個數

char_length(string)character_length(string)

int

字符串包含的字符的個數

lower(string)

text

將字符串轉換成小寫的格式

octet_length(string)

int

字符串包含的字節的個數

overlay(string placing string from int [for int])

text

替換字符串中的子串

position(substring in string)

int

查找子串在字符串中出現的位置

substring(string [from int] [for int])

text

從字符串中找出指定的子串。from int表示子串開始的位置,默認從1開始,例如from 2表示子串從string的第二個字符開始。for int表示子串的長度,默認取string從子串開始位置到string的末尾的所有子串,例如for 3表示子串的長度是3。

substring(string from pattern)

text

從字符串中找出匹配POSIX正則表達式的子串,參見第7.7.3節獲取模式匹配的詳細信息。

substring(string from pattern forescape)

text

從字符串中找出匹配正則表達式的子串,參見第7.7.3節獲取模式匹配的詳細信息。

trim([leading | trailing | both] [characters] from string)

text

從字符串string的開始、末尾或者開始和末尾刪除只包含指定的字符串characters 中的字符的最長的字符串。

如果沒有指定參數characters,則它的值默認是空格。

leading表示只刪除字符串頭部匹配的子串。

trailing 表示只刪除字符串尾部匹配的子串。

both表示同時刪除字符串頭部和尾部匹配的子串。

upper(string)

text

將字符串轉換成大寫的格式

 7-7. SQL字符串函數和運算符實例

例子

結果

'Post' || 'greSQL'

PostgreSQL

'Value: ' || 42

Value: 42

bit_length('jose')

32

char_length('jose')

4

lower('TOM')

tom

octet_length('jose')

4

Overlay('Txxxxas' placing 'hom' from 2 for 4)

Thomas

position('om' in 'Thomas')

3

(1)substring('Thomas' from 2 for 3)

(2)substring('Thomas' from 1 for 1)

(3)substring('Thomas' from 2)

(1)hom

(2)T

(3)homas

substring('Thomas' from '...$')

mas

substring('Thomas' from '%#"o_a#"_' for '#')

oma

(1)trim(both 'x' from 'xTomxx')

 

(2)trim(both 'xf' from 'xTomxxf');

 

(3)trim(both 'gxf' from 'xgTxTomxxf');

 

(4)trim(both  from '  xgTxTomxxf  ');

 

(5)trim(leading 'xf' from 'xTomxxf')

(1)Tom

(2)Tom

(3)TxTom

(4)xgTxTomxxf

(5)Tomxxf

upper('tom')

TOM

 

    還有其它的字符串運算函數可以用,表7-8列出了這些函數。它們有些在內部用於實現表7-6列出的SQL標準字符串函數。表7-9列出了表7-8中的函數實例。

 7-8其它的字符串函數

 

函數

返回值類型

描述

ascii(string)

int

參數的第一個字符的ASCII編碼。對於UTF8類型的字符串,返回它的第一個字符的UTF-8編碼。對於其它的多字節編碼類型的字符串,參數的第一個字符必須是ASCII類型的字符。

 

btrim(string text [characterstext])

text

從字符串string的開始和末尾刪除只包含指定的字符串characters 中的字符的最長的字符串。如果沒有指定參數characters,則它的值默認是空格。

chr(int)

text

返回指定的編碼值對應的字符。參數的值不能是0。參數必須是合法的ASCII編碼值或UTF8編碼值。

convert(string bytea, src_encoding name, dest_encoding name)

bytea

將用 src_encoding編碼的字符串轉換成用dest_encoding編碼的字符串。數據庫中必須存在src_encoding到dest_encoding的編碼轉換函數。表7-10列出了數據庫中內置的合法的編碼轉換組合。

如果數據庫中不存在 src_encoding到est_encoding的編碼轉換函數,可以使用命令 CREATE CONVERSION創建一個。

convert_from(string bytea, src_encoding name)

text

將用 src_encoding編碼的字符串轉換成用數據庫當前的編碼類型編碼的字符串。

convert_to(string text, dest_encoding name)

bytea

將字符串轉換成以dest_encoding編碼的格式。

decode(string text, type text)

bytea

從指定的格式的字符串中解碼出二進制字符串。格式包括base64hexescape,詳細信息參考下面的encode函數。

encode(data bytea, type text)

text

將二進制字符串轉換成指定的格式字符串。一共有三種格式:base64hexescape。關於base64請參考RFC2045,hex是十六進制格式。escape只是用/000來表示字節0,用兩個反斜槓來表示一個反斜槓。

initcap(string)

text

首先將字符串用非字母和數字字符分割成多個子串,然後將每個子串的第一個字符大寫,剩下的字符都小寫。

 

length(string)

int

返回字符串中字符的個數

length(string bytea, encoding name )

int

返回字符串 bytea中的字符的個數,bytea的編碼類型必須是encoding指定的。

 

lpad(string text, length int [,fill text])

text

 

用指定的字符串fill將字符串string填充成長度爲 length的字符串。如果string的長度已經超過length,則將string截斷成長度爲length的字符串。

如果沒有指定fill的值,則fill的值默認是空格。填充的字符串放在string的頭部。

ltrim(string text [characterstext])

text

從字符串string的頭部刪除只包含指定的字符串characters 中的字符的最長的字符串。

如果沒有指定參數characters,則它的值默認是空格。

md5(string)

text

計算字符串string的MD5哈希值。結果用十六進制的形式表示。

pg_client_encoding()

name

返回客戶端的當前字符編碼類型名稱。

quote_ident(string text)

text

返回字符串string作爲合法的SQL標識符的表示形式。

quote_literal(string text)

text

將字符串string轉換成一個合法的SQL語句字符串常量的形式。

quote_literal(value anyelement)

text

將 value轉換成字符串常量,value必須是一個數值。

regexp_matches(string text, pattern text [, flags text])

setof text[]

返回所有匹配指定的POSIX正則表達式的子串。參見第7.7.3節。

regexp_replace(string text, pattern text, replacement text [, flags text])

text

用字符串 replacement替換所有匹配指定的POSIX正則表達式的子串。參見第7.7.3節。

regexp_split_to_array(string text, pattern text [, flags text ])

text[]

使用POSIX正則表達式作爲分割符來分割字符串。參見第7.7.3節。

regexp_split_to_table(string text, pattern text [, flags text])

setof text

使用POSIX正則表達式作爲分割符來分割字符串。參見第7.7.3節。

repeat(string text, number int)

text

將字符串string重複指定的次數。

replace(string text, from text, to text)

text

將字符串string中的所有子串from用子串to代替。

rpad(string text, length int [,fill text])

text

用指定的字符串fill將字符串string填充成長度爲 length的字符串。如果string的長度已經超過length,則將string截斷成長度爲length的字符串。

如果沒有指定fill的值,則fill的值默認是空格。填充的字符串放在string的尾部。

rtrim(string text [characterstext])

text

從字符串string的尾部刪除只包含指定的字符串characters 中的字符的最長的字符串。

如果沒有指定參characters,則它的值默認是空格。

split_part(string text, delimiter text, field int)

text

將字符串string用分割符delimiter分成多個域後,返回field指定的域(域的編號從1開始)。delimiter可以是一個字符串。

strpos(string, substring)

int

返回substring在string中的位置。

substr(string, from [count] int)

text

從字符串string中取出指定的子串,如果沒有指定參數count,則取出從from到字符串結尾這部分子串。與函數substring(string from from for count) 的功能相同。

to_ascii(string text [encodingtext])

text

將用 ASCII表示的字符串轉換成其它編碼類型的字符串(只支持LATIN1LATIN2LATIN9WIN1250 )

to_hex(number int or bigint)

text

將數字轉換成十六進制的表示形式。

translate(string text, from text, to text)

text

如果字符串string中的某個字符匹配字符串from的某個字符,則string中的這個字符將用字符串to中和from中的匹配字符對應的字符代替。字符串to和from的長度應該相等,如果不相等,參見例子中的處理方式。

 7-9其它的字符串函數實例

例子

結果

(1)ascii('x')

(2)ascii('yz')

(3)ascii('我是')

(1)120

(2)121

(3)25105

(1)btrim('xyxtrimyyx', 'xy')

(2)btrim('xgTomxxf','gxf');

(1)trim

(2)Tom

(1)chr(65)

(2)chr(25105)

(3)chr(25104)

(1)A

(2)我

(3)成

convert('text_in_utf8', 'UTF8', 'LATIN1')

用ISO 8859-1格式表示的字符串text_in_utf8

convert_from('text_in_utf8', 'UTF8')

用數據庫當前的編碼類型表示的字符串text_in_utf8

convert_to('some text', 'UTF8')

用UTF8編碼的字符串

(1)decode(‘MTIzAAE=', 'base64')

(2)decode('3132330001','hex')

(1)123/000/001

(2)123/000/001

(1)encode(E'123//000//001', 'base64')

(2)encode(E'123//000//001', 'hex')

(1)MTIzAAE=

(2)3132330001

(1)initcap('hi THOMAS')

(2)initcap('hh+jj');

(1)Hi Thomas

(2)Hh+Jj

(1)length('jose')

(2)length('我是誰')

(1)4

(2)3

length('jose', 'UTF8')

4

(1)lpad('hi', 5, 'xy')

(2)lpad('gggggg',4,'h');

(3)lpad('gg',4,'h');

(4)lpad('gg',4);

(1)xyxhi

(2)gggg

(3)hhgg

(4)  gg,注意gg前面是兩個空格。

ltrim('zzzytrim', 'xyz')

trim

md5('abc')

900150983cd24fb0 d6963f7d28e17f72

pg_client_encoding()

 GB18030

(1)quote_ident('Foo bar')

(2)quote_ident('abc')

(3)quote_ident('abc''');

(1)"Foo bar"

(2)abc

(3) "abc'"

(1)quote_literal('O/'Reilly')

(2)quote_literal('abc//');

(1)'O''Reilly'

(2) E'abc//'

quote_literal(42.5)

'42.5'

regexp_matches('foobarbequebaz', '(bar)(beque)')

{bar,beque}

regexp_replace('Thomas', '.[mN]a.', 'M')

ThM

regexp_split_to_array('hello world', E'//s+')

{hello,world}

regexp_split_to_table('hello world', E'//s+')

hello

world

(2 rows)

repeat('Pg', 4)

PgPgPgPg

replace('abcdefabcdef', 'cd', 'XX')

abXXefabXXef

rpad('hi', 5, 'xy')

hixyx

rtrim('trimxxxx', 'x')

trim

(1)split_part('abc~@~def~@~ghi', '~@~', 2)

(2)split_part('abc$de$f','$',3);

(1)def

(2)f

(1)strpos('high', 'ig')

(2)strpos('我是','是')

(1)2

(2)2

substr('alphabet', 3, 2)

ph

to_ascii('Karel')

Karel

to_hex(2147483647)

7fffffff

(1)translate('12345', '14', 'ax')

(2)translate('abcdef','abc','f')

(3)translate('abcdef','abc','fg')

(1)a23x5

(2)fdef

(3)fgdef

  7-10系統內置的編碼類型轉換

編碼類型轉換名稱

源編碼類型

目標編碼類型

ascii_to_mic

SQL_ASCII

MULE_INTERNAL

ascii_to_utf8

SQL_ASCII

UTF8

big5_to_euc_tw

BIG5

EUC_TW

big5_to_mic

BIG5

MULE_INTERNAL

big5_to_utf8

BIG5

UTF8

euc_cn_to_mic

EUC_CN

MULE_INTERNAL

euc_cn_to_utf8

EUC_CN

UTF8

euc_jp_to_mic

EUC_JP

MULE_INTERNAL

euc_jp_to_sjis

EUC_JP

SJIS

euc_jp_to_utf8

EUC_JP

UTF8

euc_kr_to_mic

EUC_KR

MULE_INTERNAL

euc_kr_to_utf8

EUC_KR

UTF8

euc_tw_to_big5

EUC_TW

BIG5

euc_tw_to_mic

EUC_TW

MULE_INTERNAL

euc_tw_to_utf8

EUC_TW

UTF8

gb18030_to_utf8

GB18030

UTF8

gbk_to_utf8

GBK

UTF8

iso_8859_10_to_utf8

LATIN6

UTF8

iso_8859_13_to_utf8

LATIN7

UTF8

iso_8859_14_to_utf8

LATIN8

UTF8

iso_8859_15_to_utf8

LATIN9

UTF8

iso_8859_16_to_utf8

LATIN10

UTF8

iso_8859_1_to_mic

LATIN1

MULE_INTERNAL

iso_8859_1_to_utf8

LATIN1

UTF8

iso_8859_2_to_mic

LATIN2

MULE_INTERNAL

iso_8859_2_to_utf8

LATIN2

UTF8

iso_8859_2_to_windows_1250

LATIN2

WIN1250

iso_8859_3_to_mic

LATIN3

MULE_INTERNAL

iso_8859_3_to_utf8

LATIN3

UTF8

iso_8859_4_to_mic

LATIN4

MULE_INTERNAL

iso_8859_4_to_utf8

LATIN4

UTF8

iso_8859_5_to_koi8_r

ISO_8859_5

KOI8

iso_8859_5_to_mic

ISO_8859_5

MULE_INTERNAL

iso_8859_5_to_utf8

ISO_8859_5

UTF8

iso_8859_5_to_windows_1251

ISO_8859_5

WIN1251

iso_8859_5_to_windows_866

ISO_8859_5

WIN866

iso_8859_6_to_utf8

ISO_8859_6

UTF8

iso_8859_7_to_utf8

ISO_8859_7

UTF8

iso_8859_8_to_utf8

ISO_8859_8

UTF8

iso_8859_9_to_utf8

LATIN5

UTF8

johab_to_utf8

JOHAB

UTF8

koi8_r_to_iso_8859_5

KOI8

ISO_8859_5

koi8_r_to_mic

KOI8

MULE_INTERNAL

koi8_r_to_utf8

KOI8

UTF8

koi8_r_to_windows_1251

KOI8

WIN1251

koi8_r_to_windows_866

KOI8

WIN866

mic_to_ascii

MULE_INTERNAL

SQL_ASCII

mic_to_big5

MULE_INTERNAL

BIG5

mic_to_euc_cn

MULE_INTERNAL

EUC_CN

mic_to_euc_jp

MULE_INTERNAL

EUC_JP

mic_to_euc_kr

MULE_INTERNAL

EUC_KR

mic_to_euc_tw

MULE_INTERNAL

EUC_TW

mic_to_iso_8859_1

MULE_INTERNAL

LATIN1

mic_to_iso_8859_2

MULE_INTERNAL

LATIN2

mic_to_iso_8859_3

MULE_INTERNAL

LATIN3

mic_to_iso_8859_4

MULE_INTERNAL

LATIN4

mic_to_iso_8859_5

MULE_INTERNAL

ISO_8859_5

mic_to_koi8_r

MULE_INTERNAL

KOI8

mic_to_sjis

MULE_INTERNAL

SJIS

mic_to_windows_1250

MULE_INTERNAL

WIN1250

mic_to_windows_1251

MULE_INTERNAL

WIN1251

mic_to_windows_866

MULE_INTERNAL

WIN866

sjis_to_euc_jp

SJIS

EUC_JP

sjis_to_mic

SJIS

MULE_INTERNAL

sjis_to_utf8

SJIS

UTF8

tcvn_to_utf8

WIN1258

UTF8

uhc_to_utf8

UHC

UTF8

utf8_to_ascii

UTF8

SQL_ASCII

utf8_to_big5

UTF8

BIG5

utf8_to_euc_cn

UTF8

EUC_CN

utf8_to_euc_jp

UTF8

EUC_JP

utf8_to_euc_kr

UTF8

EUC_KR

utf8_to_euc_tw

UTF8

EUC_TW

utf8_to_gb18030

UTF8

GB18030

utf8_to_gbk

UTF8

GBK

utf8_to_iso_8859_1

UTF8

LATIN1

utf8_to_iso_8859_10

UTF8

LATIN6

utf8_to_iso_8859_13

UTF8

LATIN7

utf8_to_iso_8859_14

UTF8

LATIN8

utf8_to_iso_8859_15

UTF8

LATIN9

utf8_to_iso_8859_16

UTF8

LATIN10

utf8_to_iso_8859_2

UTF8

LATIN2

utf8_to_iso_8859_3

UTF8

LATIN3

utf8_to_iso_8859_4

UTF8

LATIN4

utf8_to_iso_8859_5

UTF8

ISO_8859_5

utf8_to_iso_8859_6

UTF8

ISO_8859_6

utf8_to_iso_8859_7

UTF8

ISO_8859_7

utf8_to_iso_8859_8

UTF8

ISO_8859_8

utf8_to_iso_8859_9

UTF8

LATIN5

utf8_to_johab

UTF8

JOHAB

utf8_to_koi8_r

UTF8

KOI8

utf8_to_sjis

UTF8

SJIS

utf8_to_tcvn

UTF8

WIN1258

utf8_to_uhc

UTF8

UHC

utf8_to_windows_1250

UTF8

WIN1250

utf8_to_windows_1251

UTF8

WIN1251

utf8_to_windows_1252

UTF8

WIN1252

utf8_to_windows_1253

UTF8

WIN1253

utf8_to_windows_1254

UTF8

WIN1254

utf8_to_windows_1255

UTF8

WIN1255

utf8_to_windows_1256

UTF8

WIN1256

utf8_to_windows_1257

UTF8

WIN1257

utf8_to_windows_866

UTF8

WIN866

utf8_to_windows_874

UTF8

WIN874

windows_1250_to_iso_8859_2

WIN1250

LATIN2

windows_1250_to_mic

WIN1250

MULE_INTERNAL

windows_1250_to_utf8

WIN1250

UTF8

windows_1251_to_iso_8859_5

WIN1251

ISO_8859_5

windows_1251_to_koi8_r

WIN1251

KOI8

windows_1251_to_mic

WIN1251

MULE_INTERNAL

windows_1251_to_utf8

WIN1251

UTF8

windows_1251_to_windows_866

WIN1251

WIN866

windows_1252_to_utf8

WIN1252

UTF8

windows_1256_to_utf8

WIN1256

UTF8

windows_866_to_iso_8859_5

WIN866

ISO_8859_5

windows_866_to_koi8_r

WIN866

KOI8

windows_866_to_mic

WIN866

MULE_INTERNAL

windows_866_to_utf8

WIN866

UTF8

windows_866_to_windows_1251

WIN866

WIN

windows_874_to_utf8

WIN874

UTF8

euc_jis_2004_to_utf8

EUC_JIS_2004

UTF8

ut8_to_euc_jis_2004

UTF8

EUC_JIS_2004

shift_jis_2004_to_utf8

SHIFT_JIS_2004

UTF8

ut8_to_shift_jis_2004

UTF8

SHIFT_JIS_2004

euc_jis_2004_to_shift_jis_2004

EUC_JIS_2004

SHIFT_JIS_2004

shift_jis_2004_to_euc_jis_2004

SHIFT_JIS_2004

EUC_JIS_2004

 

7.5 二進制字符串函數和運算符

       本節描述處理bytea類型的數值的函數和運算符。表7-11列出了這些函數和運算符,表7-12列出了這些函數和運算符的實例。表7-13中列出了其它的二進制字符串處理函數,這些函數有一些在內部使用,用來實現表7-11中列出的SQL標準的二進制字符串函數的,表7-14列出了表7-13中函數的實例。

7-11. 二進制字符串函數和運算符

函數

返回值類型

描述

string || string

bytea

連接兩個二進制字符串

get_bit(string, offset)

int

從二進制字符串中找出一個指定的二進制位

get_byte(string, offset)

int

從二進制字符串中找出一個指定的字節

octet_length(string)

int

二進制字符串含有的字節的個數

position(substring in string)

int

從二進制字符串中找出指定的子串出現的位置

set_bit(string, offset,newvalue)

bytea

將二進制字符串中的某個二進制位設爲指定的值

set_byte(string, offset,newvalue)

bytea

將二進制字符串中的某個字節設爲指定的值

substring(string [from int] [for int])

bytea

從二進制字符串中中找出指定的子串。from int表示子串開始的位置,默認從1開始,例如from 2表示子串從string的第二個字符開始。for int表示子串的長度,默認取string從子串開始位置到string的末尾的所有子串,例如for 3表示子串的長度是3。

trim([both] bytes from string)

bytea

從二進制字符串string的開始和末尾刪除只包含指定的二進制字符串bytes中的字符的最長的二進制字符串。

7-12. 二進制字符串函數和運算符實例

例子

結果

E'////Post'::bytea || E'//047gres//000'::bytea

//Post'gres/000

get_bit(E'Th//000omas'::bytea, 45)

1

get_byte(E'Th//000omas'::bytea, 4)

109

octet_length(E'jo//000se'::bytea)

5

position(E'//000om'::bytea in E'Th//000omas'::bytea)

3

set_bit(E'Th//000omas'::bytea, 45, 0)

Th/000omAs

set_byte(E'Th//000omas'::bytea, 4, 64)

Th/000o@as

substring(E'Th//000omas'::bytea from 2 for 3)

h/000o

trim(E'//000'::bytea from E'//000Tom//000'::bytea)

Tom

 

7-13. 其它二進制字符串函數

函數

返回值類型

描述

btrim(string bytea, bytes bytea)

bytea

從二進制字符串string的開始和末尾刪除只包含指定的二進制字符串bytes中的字符的最長的二進制字符串。

decode(string text, type text)

bytea

從指定的格式的字符串中解碼出二進制字符串。格式包括base64hexescape,詳細信息參考下面的encode函數。

encode(string bytea, type text)

text

將二進制字符串轉換成指定的格式字符串。一共有三種格式:base64hexescape。關於base64請參考RFC2045,hex是十六進制格式。escape只是用/000來表示字節0,用兩個反斜槓來表示一個反斜槓。

length(string)

int

返回二進制字符串的長度。

md5(string)

text

計算二進制字符串的MD5哈希值, 結果用十六進制數表示 。

7-14. 其它二進制字符串函數實例

例子

結果

btrim(E'//000trim//000'::bytea, E'//000'::bytea)

trim

decode(E'123//000456', 'escape')

123/000456

encode(E'123//000456'::bytea, 'escape')

123/000456

length(E'jo//000se'::bytea)

5

md5(E'Th//000omas'::bytea)

8ab2d3c9689aaf18 b4958c334c82d8b1

 

 

7.6 位串函數和運算符

    本節描述用於處理位串類型數據的函數和運算符。位串類型包括bit bit varying。對於位串類型的數據可以使用常用的比較運算符,表7-15列出了其它的運算符。運算符&|和 # 要求兩個操作數的長度相等。在對位串類型的數據進行移位操作的時候,位串的長度不會發生變化。

7-15.位串運算符

運算符

描述

例子

結果

||

連接

B'10001' || B'011'

10001011

&

按位AND(與)

B'10001' & B'01101'

00001

|

按位OR(或)

B'10001' | B'01101'

11101

#

按位XOR(異或)

B'10001' # B'01101'

11100

~

按位NOT(非)

~ B'10001'

01110

<<

按位左移

B'10001' << 3

01000

>>

按位右移

B'10001' >> 2

00100

    函數lengthbit_lengthoctet_lengthpositionsubstring除了用於字符串之外,也可以用於位串。

    此外,可以在整數和位串類型之間進行轉換。例如:

44::bit(10)                    0000101100

44::bit(3)                     100

cast(-44 as bit(12))           111111010100

'1110'::bit(4)::integer        14

 

    將整數轉換成bit(n)類型時,只會取整數的最右邊的n個二進制位。注意,如果只是轉換爲 "bit",意思就是轉換成 bit(1),結果只會取整數的最右邊的那個二進制位。

轉載地址:

http://blog.csdn.net/neo_liu0000/article/details/6255303

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章