sql常⽤格式化函数及字符串函数
⼀.常⽤格式化函数
1.⽇期转字符串
字符串长度0到59mysql:date_format()函数
select date_format(now(), '%Y-%m-%d %H:%i:%s');
%Y:年份
%m:⽉份号(01-12)
%d:⼀个⽉⾥的⽇(01-31)
pg:to_char()函数
select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS');
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.字符串转⽇期
mysql:str_to_date()函数
select str_to_date('2017-09-18', '%Y-%m-%d %H:%i:%s');
select str_to_date('2017-09-18 12:08:35', '%Y-%m-%d %H:%i:%s');
pg:
select to_date('2017-09-18','YYYY-MM-DD');
select to_timestamp('2017-09-18 22:41:50','YYYY-MM-DD HH24:MI:SS');
待解析的字符串可以包含时分秒,也可以不包含时分秒。
解析格式同样可以任意指定。
to_date只会取到⽇期,不会取到时分秒,时间是该⽇的0点0分0秒,⽽不管待解析的字符串中时分秒是什么。
to_timestamp会取到具体时分秒,如果待解析的字符串中只有⽇期,没有时分秒,则时间也是该⽇的0点0分0秒。
3、⽇期转时间戳
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。想要得到3,则需要⽤char_length函数
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'字符串

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。