VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 626|回复: 5

看看SQL又没有这样的功能?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-29 17:00:01 | 显示全部楼层 |阅读模式
我现在要对传过来的变量作处理,传递过来的变量为:字符串+数字
但是我想取出其中的数字,但是字符串位数不固定,在SQL中有没有这样的只取数字的功能,比如,传参数"AAA12",只取到12,关键是前面字符串位数不固定
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-3-3 03:30:01 | 显示全部楼层
字符串中如果没有数字,倒是可以做到
只能自己写,没有现成的
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-3-3 17:15:01 | 显示全部楼层
declare @str varchar(100)
set @str='AAA12'
select right(@str, len(@str)-patindex('%[0-9]%', @str)+1)
--result
12
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-3-3 22:45:02 | 显示全部楼层
declare @str varchar(100)
set @str='AA12'
select stuff(@str, 1, patindex('%[0-9]%', @str)-1, '')
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-3-4 10:45:01 | 显示全部楼层
declare @SQL_ALL CHAR(255)
declare @SQL_CHAR CHAR(255)
declare @SQL_INT CHAR(255)
declare @SQL_LEN INT
declare @INT_LEN INT

select @SQL_ALL='AA121334A16552'
SELECT @SQL_LEN=len(@SQL_ALL)
select @INT_LEN=1
while SUBSTRING(@SQL_ALL,@SQL_LEN-@INT_LEN,1) BETWEEN '1' AND '9'
    SELECT @INT_LEN=@INT_LEN+1

SELECT RIGHT(RTRIM(@SQL_ALL),@INT_LEN)

--------------
16552
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-3-4 15:00:02 | 显示全部楼层
1、字符串中间没有数字,按照fanfan1980 的方法比较简单
2、如果字符串中间可能有数字,就要从右边开始判断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表