sql常用格式化函數及字符串函數


一.常用格式化函數

1.日期轉字符串

select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS');    // mysql沒有to_char()函數,pg有

YYYY:年份

MM:月份號(01-12)

DD:一個月里的日(01-31)

HH24:一天的小時數(00-23)

MI:分鍾(00-59)

SS:秒(00-59)

格式化格式可以由以上英文字母任意搭配,如可以是'YYYY-MM-DD HH24:MI:SS',也可以是'YYYY-MM-DD',也可以是'YYYYMMDD'。

2.字符串轉日期

select to_date('2017-09-18','YYYY-MM-DD');    // mysql沒有to_date()函數,pg有

select to_timestamp('2017-09-18 22:41:50','YYYY-MM-DD HH24:MI:SS');    // mysql沒有to_timestamp()函數,pg有

待解析的字符串可以包含時分秒,也可以不包含時分秒。

解析格式同樣可以任意指定。

to_date只會取到日期,不會取到時分秒,時間是該日的0點0分0秒,而不管待解析的字符串中時分秒是什么。

to_timestamp會取到具體時分秒,如果待解析的字符串中只有日期,沒有時分秒,則時間也是該日的0點0分0秒。

3.數字轉字符串

select 123.45 || ''  //pg得到'123.45'字符串,mysql得到1。為啥??

select to_char(123.5, '999999999999.9')  //得到'123.5'

select to_char(123.5 , '9999999999999')  //得到'124'

4.字符串轉數字

select '123.45' :: numeric num  //pg得到123.45,java類型為BigDecimal類型

select '123.45' :: double precision num  //pg得到123.45,java類型為Double類型

:: numeric 及 :: double precision 可以轉換 null,但不能轉換空字符串(sql會報錯)

select null :: numeric num  //pg得到null

select null :: double precision num  //pg得到null

二.常用字符串函數

1.字符串拼接

select 'ab' || 'c'  //pg得到'abc'字符串,mysql得到0。為啥??

2.字串里二進制位的個數(1個字節等於8位)

select bit_length('abc')  //pg和mysql都得到24

1個英文字符占1個字節,3個英文字符占3個字節,24位

select bit_length('中國人')  //pg和mysql都得到72

1個中文字符占3個字節,3個中文字符占9個字節,72位

3.字符串的長度

select length('abc')   //pg和mysql都得到3

select length('中國人')  //pg得到3,mysql得到9。為啥??

4.字符串替換

按索引位置替換:

select overlay('Txxas' placing 'om' from 2 for 2)  //pg得到’Tomas‘字符串。mysql不支持

overlay本身就是“覆蓋“的意思。from后面的整數表示索引,從哪里開始替換。這里的索引從1開始,即第一個字符索引為1。如果from省略的話,表示從第一個字符開始替換。for后面的整數表示替換多少個字符,for不能省略。

按字符串匹配替換:

select replace('Txxas', 'xx', 'om')  //pg和mysql都得到'Tomas'字符串

如果可以匹配到多個子字符串,則會全部替換

5.取子字符串的位置

select position('om' in 'Thomas')  //pg和mysql都得到3

如果返回0,則表示不存在此子字符串。

6.取子字符串

select substring('Tomas' from 2 for 2)  //pg和mysql都得到'om'字符串

from和for的含義同overlay()函數的一樣

7.刪除字符串兩邊的空格

select trim('   abc   ')  //pg和mysql都得到'abc'字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM