sql,字符串中取数字

sql,字符串中取数字
比如‘宁155ML21’,表中一个字段都是此类型的,我想取L后面也就是字母后面的数字,
中间的ML不一定,有可能是其他的大写字母。
用sql查出表中的这个字段字母后面数字的最大值。

在线等
gyingz 我要的是sql不是问题总结呀!
atdeep 我看不懂你的函数。
我只要sql语句……
高手再来试一下吧,我还没找到正确答案啊……

sorry ,linkzq,我用的是oracle9i,and,realsex,我做的不是车牌号生成算法。
所以,两位的我试过了,都不对。

1、创建测试大竖表,

create table test_str(id int, v_str varchar2(20));

2、插入测试数据

insert into test_str values(1,'abc123');

insert into test_str values(2,'ef414219sd');

insert into test_str values(3,'123');

insert into test_str values(4,'dddfg');

commit;

3、查询表中全量数芹键据,select t.* from test_str t;

4、编写语句,取滚首大字符串中的数字;

   select t.*, regexp_replace(v_str,'D','') v_str2 from test_str t;


select
substring(所查询字符串,patindex('%[^0-9][0-9]%',所查询字符串)+1,patindex('%[0-9][^0-9]%',所查询字符饥缓串)-patindex('%[^0-9][0-9]%',所查询字符串))这个只能查询第一次在字符串出现的数衫搜字串,希望可或肢历帮到你你
如果你使用悔此的是Oracle 10g (或以上版本)的数据库,则可以使用使碧早迅用如下语句,比如表名为 test ,其中你关睁巧注的那个列名为 cc1 ,则语句如下:

select max(to_number(nvl(regexp_substr(cc1,'[0-9]*$'),0))) from test;
这应该是车牌号自动生成薯薯慎的算法吧?
车牌号的前几位是固数敬定的,不会变,总长度一般也不变
在这情况下,可以这样写,得到最大号码
SELECT MAX(RIGHT(Field,2)) AS Expr1
FROM [Table]
GROUP BY LEFT(Field, 6)

如果需要再补上前面的部手腔分,生成完整的号码,如下:
SELECT LEFT(Field, 6)
+ REPLICATE('0', 2 - LEN(MAX(RIGHT(Field, 2))))
+ MAX(RIGHT(Field,2)) AS Expr1
FROM [Table]
GROUP BY LEFT(Field, 6)

已经做了补“0”处理
你如果能确定字母后面的数字长度或者数字前橡弯面的长度那就好办了
1.确定数字的长度(例如长度为2)
substr('宁155ML21',length('宁155ML21')-1,2)
其中的2为截取的长度
2.确定前面字母的长度
substr('宁155ML21',7)
如果上面两种都不能确定,我再颤芦想想

看看我说的梁洞闷第二种方法,如果能确定数字前面字母的长度,就用
select substr('宁155ML21',7) from table
← 上一篇: 下一篇: →