SQL截取字符串替换


首先申明,substr()是基于Oracle的,substring()是基于SQL Server的,切记不可混用,否则会报错!

MySQL: SUBSTR( ), SUBSTRING( )
Oracle: SUBSTR( )
SQL Server: SUBSTRING( )

语法区别MySQLOracle
/truncate(123.123,2)TRUNC(123.123,2)
空值返0IFNULL、COALESCEnvl、nvl2
时间转换为字符串型时间date_format(NOW(),’%Y-%m-%d’)to_char(sysdate, ‘YYYY-MM-DD’)
字符串型时间转换为时间类型date_format(NOW(),’%Y-%m-%d’)date_format(NOW(),’%Y-%m-%d’)
获取字符串长度SELECT char_length(str)SELECT length(str)
整形转换字符串CAST(123 AS CHAR(3))to_char(123)
字符串转整型cast(‘123’ as SIGNED)to_number(‘123’)
连表select * from ta left join tb on ta.id=tb.id; #左关联 select * from ta right join tb on ta.id=tb.id; #右关联select * from ta, tb where ta.id = tb.id(+); #左关联 select * from ta, tb where ta.id(+) = tb.id; #右关联
排序select * from USER A order by IF(ISNULL(A.REMARK),1,0),A.REMARK desc ; select * from USER A order by IF(ISNULL(A.REMARK),0,1),A.REMARK descSELECT * FROM USER A ORDER BY A.REMARK DESC NULLS FIRST; SELECT * FROM USER A ORDER BY A.REMARK DESC NULLS LAST

字符串截取

1. left()截取左边

left(name,4)截取左边的4个字符 :

SELECT LEFT(201809,4)

结果:2018

2. right()截取右边

right(name,2)截取右边的2个字符:

SELECT RIGHT(201809,2)

结果:09

3. SUBSTR() / SUBSTRING() 截取

SUBSTRING(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符:

SELECT SUBSTRING('一二三四五六七',5,3)

结果:五六七

SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符:

SELECT SUBSTRING('一二三四五六七',3)

结果:三四五六七

SUBSTRING(name, -4) 截取name这个字段的第 4 个字符位置(倒数)开始取,直到结束:

SELECT SUBSTRING('一二三四五六七',-4)

结果:四五六七

SUBSTRING(name, -4,2) 截取name这个字段的第 4 个字符位置(倒数)开始取,只截取之后的2个字符:

SELECT SUBSTRING('一二三四五六七',-4,2)

结果:三四五六七

注意:我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。

substring_index(‘www.baidu.com’, ‘.’, 2) 截取第二个 ‘.’ 之前的所有字符

SELECT substring_index('www.baidu.com', '.', 2)

结果:www.baidu

substring_index(‘www.baidu.com’, ‘.’, -2) 截取第二个 ‘.’ (倒数)之后的所有字符:

SELECT substring_index('www.baidu.com', '.', -2)

结果:baidu.com

SUBSTR(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符:

SELECT SUBSTR('一二三四五六七', 1, CHAR_LENGTH('一二三四五六七')-3) 

结果:一二三四

字符串替换

1. 字段为null的时候替换为0

SELECT coalesce(exp1,exp2,…) as info FROM table1

SELECT id,pass_word,COALESCE(pass_word,0) FROM sys_user
idpass_wordCOALESCE(pass_word,0)
1admin123456admin123456
2null0

2. 字段中包含qq替换为163

SELECT id,email,REPLACE(email,'qq','163') FROM sys_user
idemailREPLACE(email,‘qq’,‘163’)
18050627@qq.com8050627@163.com
215502266662@126.com15502266662@126.com

3. 字段某值替换为某值

Oracle关键字为 DECODE

SELECT
	id,
	status,
CASE
	status
		WHEN 0 THEN
		'停用' 
		WHEN 1 THEN
		'启用' ELSE '未知' 
	END AS statusName 
FROM
	sys_user
idstatusstatusName
10停用
21启用
32未知

4. 有值则使用, 无值则替换

Oracle关键字为 nvl

select id,status, IFNULL(status,'无状态') from sys_user
idstatusIFNULL(status,‘无状态’)
10停用
21启用
3null无状态

5. 条件true则用value1, 否则用value2

Oracle关键字为 nvl2

select id,status, IF(status=1,'启用','停用') from sys_user
idstatusIF(status=1,‘启用’,‘停用’)
10停用
21启用
32停用
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值