濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PostgreSQL教程(六):函數(shù)和操作符詳解(2)

PostgreSQL教程(六):函數(shù)和操作符詳解(2)

熱門標(biāo)簽:海豐有多少商家沒(méi)有地圖標(biāo)注 打電話智能電銷機(jī)器人授權(quán) 美容工作室地圖標(biāo)注 重慶自動(dòng)外呼系統(tǒng)定制 外呼調(diào)研系統(tǒng) 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 漯河外呼電話系統(tǒng) 辦公外呼電話系統(tǒng) 地圖標(biāo)注和圖片名稱的區(qū)別

六、模式匹配:

    PostgreSQL中提供了三種實(shí)現(xiàn)模式匹配的方法:SQL LIKE操作符,更近一些的SIMILAR TO操作符,和POSIX-風(fēng)格正則表達(dá)式。
    1. LIKE:
 

復(fù)制代碼 代碼如下:

    string LIKE pattern [ ESCAPE escape-character ]
    string NOT LIKE pattern [ ESCAPE escape-character ]
 

    每個(gè)pattern定義一個(gè)字串的集合。如果該string包含在pattern代表的字串集合里,那么LIKE表達(dá)式返回真。和我們想象的一樣,如果LIKE返回真,那么NOT LIKE表達(dá)式返回假,反之亦然。在pattern里的下劃線(_)代表匹配任何單個(gè)字符,而一個(gè)百分號(hào)(%)匹配任何零或更多字符,如:
 
復(fù)制代碼 代碼如下:

    'abc' LIKE 'abc'     true
    'abc' LIKE 'a%'     true
    'abc' LIKE '_b_'    true
    'abc' LIKE 'c'        false 
 

    要匹配文本的下劃線或者百分號(hào),而不是匹配其它字符,在pattern里相應(yīng)的字符必須前導(dǎo)轉(zhuǎn)義字符。缺省的轉(zhuǎn)義字符是反斜杠,但是你可以用ESCAPE子句指定一個(gè)。要匹配轉(zhuǎn)義字符本身,寫兩個(gè)轉(zhuǎn)義字符。我們也可以通過(guò)寫成ESCAPE ''的方式有效地關(guān)閉轉(zhuǎn)義機(jī)制,此時(shí),我們就不能關(guān)閉下劃線和百分號(hào)的特殊含義了。
    關(guān)鍵字ILIKE可以用于替換LIKE,令該匹配就當(dāng)前的區(qū)域設(shè)置是大小寫無(wú)關(guān)的。這個(gè)特性不是SQL標(biāo)準(zhǔn),是PostgreSQL的擴(kuò)展。操作符~~等效于LIKE, 而~~*對(duì)應(yīng)ILIKE。還有!~~和!~~*操作符分別代表NOT LIKE和NOT ILIKE。所有這些操作符都是PostgreSQL特有的。

    2. SIMILAR TO正則表達(dá)式:
    SIMILAR TO根據(jù)模式是否匹配給定的字符串而返回真或者假。
 

復(fù)制代碼 代碼如下:

    string SIMILAR TO pattern [ESCAPE escape-character]
    string NOT SIMILAR TO pattern [ESCAPE escape-character]
 

    它和LIKE非常類似,支持LIKE的通配符('_'和'%')且保持其原意。除此之外,SIMILAR TO還支持一些自己獨(dú)有的元字符,如:   
    1). | 標(biāo)識(shí)選擇(兩個(gè)候選之一)。
    2). * 表示重復(fù)前面的項(xiàng)零次或更多次。
    3). + 表示重復(fù)前面的項(xiàng)一次或更多次。
    4). 可以使用圓括弧()把項(xiàng)組合成一個(gè)邏輯項(xiàng)。
    5). 一個(gè)方括弧表達(dá)式[...]聲明一個(gè)字符表,就像POSIX正則表達(dá)式一樣。
    見(jiàn)如下示例:
 
復(fù)制代碼 代碼如下:

    'abc' SIMILAR TO 'abc'           true
    'abc' SIMILAR TO 'a'              false
    'abc' SIMILAR TO '%(b|d)%'  true
    'abc' SIMILAR TO '(b|c)%'     false
 

    帶三個(gè)參數(shù)的substring,substring(string from pattern for escape-character),提供了一個(gè)從字串中抽取一個(gè)匹配SQL正則表達(dá)式模式的子字串的函數(shù)。和SIMILAR TO一樣,聲明的模式必須匹配整個(gè)數(shù)據(jù)串,否則函數(shù)失效并返回NULL。為了標(biāo)識(shí)在成功的時(shí)候應(yīng)該返回的模式部分,模式必須出現(xiàn)后跟雙引號(hào)(")的兩個(gè)轉(zhuǎn)義字符。匹配這兩個(gè)標(biāo)記之間的模式的字串將被返回,如:
    MyTest=# SELECT substring('foobar' from '%#"o_b#"%' FOR '#'); --這里#是轉(zhuǎn)義符,雙引號(hào)內(nèi)的模式是返回部分。
 
復(fù)制代碼 代碼如下:

     substring
    -----------
     oob
    (1 row)
    MyTest=# SELECT substring('foobar' from '#"o_b#"%' FOR '#');  --foobar不能完全匹配后面的模式,因此返回NULL。
     substring
    -----------

    (1 row)
 

七、數(shù)據(jù)類型格式化函數(shù):

    PostgreSQL格式化函數(shù)提供一套有效的工具用于把各種數(shù)據(jù)類型(日期/時(shí)間、integer、floating point和numeric)轉(zhuǎn)換成格式化的字符串以及反過(guò)來(lái)從格式化的字符串轉(zhuǎn)換成指定的數(shù)據(jù)類型。下面列出了這些函數(shù),它們都遵循一個(gè)公共的調(diào)用習(xí)慣:第一個(gè)參數(shù)是待格式化的值,而第二個(gè)是定義輸出或輸出格式的模板。

函數(shù) 返回類型 描述 例子
to_char(timestamp, text) text 把時(shí)間戳轉(zhuǎn)換成字串 to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text) text 把時(shí)間間隔轉(zhuǎn)為字串 to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text) text 把整數(shù)轉(zhuǎn)換成字串 to_char(125, '999')
to_char(double precision, text) text 把實(shí)數(shù)/雙精度數(shù)轉(zhuǎn)換成字串 to_char(125.8::real, '999D9')
to_char(numeric, text) text 把numeric轉(zhuǎn)換成字串 to_char(-125.8, '999D99S')
to_date(text, text) date 把字串轉(zhuǎn)換成日期 to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text) timestamp 把字串轉(zhuǎn)換成時(shí)間戳 to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(double) timestamp 把UNIX紀(jì)元轉(zhuǎn)換成時(shí)間戳 to_timestamp(200120400)
to_number(text, text) numeric 把字串轉(zhuǎn)換成numeric to_number('12,454.8-', '99G999D9S')

     1. 用于日期/時(shí)間格式化的模式:

模式 描述
HH 一天的小時(shí)數(shù)(01-12)
HH12 一天的小時(shí)數(shù)(01-12)
HH24 一天的小時(shí)數(shù)(00-23)
MI 分鐘(00-59)
SS 秒(00-59)
MS 毫秒(000-999)
US 微秒(000000-999999)
AM 正午標(biāo)識(shí)(大寫)
Y,YYY 帶逗號(hào)的年(4和更多位)
YYYY 年(4和更多位)
YYY 年的后三位
YY 年的后兩位
Y 年的最后一位
MONTH 全長(zhǎng)大寫月份名(空白填充為9字符)
Month 全長(zhǎng)混合大小寫月份名(空白填充為9字符)
month 全長(zhǎng)小寫月份名(空白填充為9字符)
MON 大寫縮寫月份名(3字符)
Mon 縮寫混合大小寫月份名(3字符)
mon 小寫縮寫月份名(3字符)
MM 月份號(hào)(01-12)
DAY 全長(zhǎng)大寫日期名(空白填充為9字符)
Day 全長(zhǎng)混合大小寫日期名(空白填充為9字符)
day 全長(zhǎng)小寫日期名(空白填充為9字符)
DY 縮寫大寫日期名(3字符)
Dy 縮寫混合大小寫日期名(3字符)
dy 縮寫小寫日期名(3字符)
DDD 一年里的日子(001-366)
DD 一個(gè)月里的日子(01-31)
D 一周里的日子(1-7;周日是1)
W 一個(gè)月里的周數(shù)(1-5)(第一周從該月第一天開(kāi)始)
WW 一年里的周數(shù)(1-53)(第一周從該年的第一天開(kāi)始)

     2. 用于數(shù)值格式化的模板模式:

模式 描述
9 帶有指定數(shù)值位數(shù)的值
0 帶前導(dǎo)零的值
.(句點(diǎn)) 小數(shù)點(diǎn)
,(逗號(hào)) 分組(千)分隔符
PR 尖括號(hào)內(nèi)負(fù)值
S 帶符號(hào)的數(shù)值
L 貨幣符號(hào)
D 小數(shù)點(diǎn)
G 分組分隔符
MI 在指明的位置的負(fù)號(hào)(如果數(shù)字 0)
PL 在指明的位置的正號(hào)(如果數(shù)字 > 0)
SG 在指明的位置的正/負(fù)號(hào)

八、時(shí)間/日期函數(shù)和操作符:

    1. 下面是PostgreSQL中支持的時(shí)間/日期操作符的列表:

 

操作符 例子 結(jié)果
+ date '2001-09-28' + integer '7' date '2001-10-05'
+ date '2001-09-28' + interval '1 hour' timestamp '2001-09-28 01:00'
+ date '2001-09-28' + time '03:00' timestamp '2001-09-28 03:00'
+ interval '1 day' + interval '1 hour' interval '1 day 01:00'
+ timestamp '2001-09-28 01:00' + interval '23 hours' timestamp '2001-09-29 00:00'
+ time '01:00' + interval '3 hours' time '04:00'
- - interval '23 hours' interval '-23:00'
- date '2001-10-01' - date '2001-09-28' integer '3'
- date '2001-10-01' - integer '7' date '2001-09-24'
- date '2001-09-28' - interval '1 hour' timestamp '2001-09-27 23:00'
- time '05:00' - time '03:00' interval '02:00'
- time '05:00' - interval '2 hours' time '03:00'
- timestamp '2001-09-28 23:00' - interval '23 hours' timestamp '2001-09-28 00:00'
- interval '1 day' - interval '1 hour' interval '23:00'
- timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '1 day 15:00'
* interval '1 hour' * double precision '3.5' interval '03:30'
/ interval '1 hour' / double precision '1.5' interval '00:40'

    2. 日期/時(shí)間函數(shù):

函數(shù) 返回類型 描述 例子 結(jié)果
age(timestamp, timestamp) interval 減去參數(shù),生成一個(gè)使用年、月的"符號(hào)化"的結(jié)果 age('2001-04-10', timestamp '1957-06-13') 43 years 9 mons 27 days
age(timestamp) interval 從current_date減去得到的數(shù)值 age(timestamp '1957-06-13') 43 years 8 mons 3 days
current_date date 今天的日期    
current_time time 現(xiàn)在的時(shí)間    
current_timestamp timestamp 日期和時(shí)間    
date_part(text, timestamp) double 獲取子域(等效于extract) date_part('hour', timestamp '2001-02-16 20:38:40') 20
date_part(text, interval) double 獲取子域(等效于extract) date_part('month', interval '2 years 3 months') 3
date_trunc(text, timestamp) timestamp 截?cái)喑芍付ǖ木?/td> date_trunc('hour', timestamp '2001-02-16 20:38:40') 2001-02-16 20:00:00+00
extract(field from timestamp) double 獲取子域 extract(hour from timestamp '2001-02-16 20:38:40') 20
extract(field from interval) double 獲取子域 extract(month from interval '2 years 3 months') 3
localtime time 今日的時(shí)間    
localtimestamp timestamp 日期和時(shí)間    
now() timestamp 當(dāng)前的日期和時(shí)間(等效于 current_timestamp)    
timeofday() text 當(dāng)前日期和時(shí)間    

    3. EXTRACT,date_part函數(shù)支持的field:

描述 例子 結(jié)果
CENTURY 世紀(jì) EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); 20
DAY (月分)里的日期域(1-31) EXTRACT(DAY from TIMESTAMP '2001-02-16 20:38:40'); 16
DECADE 年份域除以10 EXTRACT(DECADE from TIMESTAMP '2001-02-16 20:38:40'); 200
DOW 每周的星期號(hào)(0-6;星期天是0) (僅用于timestamp) EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); 5
DOY 一年的第幾天(1 -365/366) (僅用于 timestamp) EXTRACT(DOY from TIMESTAMP '2001-02-16 20:38:40'); 47
HOUR 小時(shí)域(0-23) EXTRACT(HOUR from TIMESTAMP '2001-02-16 20:38:40'); 20
MICROSECONDS 秒域,包括小數(shù)部分,乘以 1,000,000。 EXTRACT(MICROSECONDS from TIME '17:12:28.5'); 28500000
MILLENNIUM 千年 EXTRACT(MILLENNIUM from TIMESTAMP '2001-02-16 20:38:40'); 3
MILLISECONDS 秒域,包括小數(shù)部分,乘以 1000。 EXTRACT(MILLISECONDS from TIME '17:12:28.5'); 28500
MINUTE 分鐘域(0-59) EXTRACT(MINUTE from TIMESTAMP '2001-02-16 20:38:40'); 38
MONTH 對(duì)于timestamp數(shù)值,它是一年里的月份數(shù)(1-12);對(duì)于interval數(shù)值,它是月的數(shù)目,然后對(duì)12取模(0-11) EXTRACT(MONTH from TIMESTAMP '2001-02-16 20:38:40'); 2
QUARTER 該天所在的該年的季度(1-4)(僅用于 timestamp) EXTRACT(QUARTER from TIMESTAMP '2001-02-16 20:38:40'); 1
SECOND 秒域,包括小數(shù)部分(0-59[1]) EXTRACT(SECOND from TIMESTAMP '2001-02-16 20:38:40'); 40
WEEK 該天在所在的年份里是第幾周。 EXTRACT(WEEK from TIMESTAMP '2001-02-16 20:38:40'); 7
YEAR 年份域 EXTRACT(YEAR from TIMESTAMP '2001-02-16 20:38:40'); 2001

4. 當(dāng)前日期/時(shí)間:

    我們可以使用下面的函數(shù)獲取當(dāng)前的日期和/或時(shí)間∶
 

復(fù)制代碼 代碼如下:

    CURRENT_DATE
    CURRENT_TIME
    CURRENT_TIMESTAMP
    CURRENT_TIME (precision)
    CURRENT_TIMESTAMP (precision)
    LOCALTIME
    LOCALTIMESTAMP
    LOCALTIME (precision)
    LOCALTIMESTAMP (precision)

    該博客中提供的所有信息均源自PostgreSQL官方文檔,編寫該篇博客的主要目的是便于今后的查閱,特此聲明。

您可能感興趣的文章:
  • PostgreSQL教程(七):函數(shù)和操作符詳解(3)
  • PostgreSQL教程(五):函數(shù)和操作符詳解(1)
  • PostgreSQL基礎(chǔ)知識(shí)之SQL操作符實(shí)踐指南

標(biāo)簽:錦州 珠海 株洲 衡陽(yáng) 烏海 晉城 來(lái)賓 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL教程(六):函數(shù)和操作符詳解(2)》,本文關(guān)鍵詞  PostgreSQL,教程,六,函數(shù),和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL教程(六):函數(shù)和操作符詳解(2)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PostgreSQL教程(六):函數(shù)和操作符詳解(2)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    奇台县| 昌黎县| 中方县| 繁昌县| 澜沧| 太康县| 沾化县| 洪雅县| 城步| 龙门县| 北碚区| 藁城市| 来安县| 拉孜县| 济阳县| 平果县| 平邑县| 乐平市| 许昌市| 江西省| 周口市| 温宿县| 依安县| 扬中市| 澄江县| 青铜峡市| 衡南县| 建湖县| 遵义市| 正阳县| 健康| 泽库县| 封开县| 三门县| 磐安县| 当雄县| 黄山市| 淮安市| 韩城市| 修武县| 芦山县|