❶ sql语句提取字符串中数字
比如你的表叫作TALBE1,字段是str1,类型为nvarchar,那么找出有湘政发的最大号加1这样写
select max(convert(int,substring(str1,patindex(N'%[1234567890]%',str1),len(str1)-patindex(N'%[1234567890]%',str1)+1-patindex(N'%[1234567890]%',reverse(str1))+1)))+1 from table1 where str1 like N'%湘政发%'
测试通过,耗时很长,请认真试试。
这是sql server 的写法。
如果是ORACAL或其它的SQL语言您可以到这里参考一下。你会发现,用SQL SERVER我的方法要比他的好
❷ SQL字符串中加入数字怎么排列
不规律啊,那就太麻烦了
如果前面的字符是固定三位的话你就
order by right(left(字段名,3),2)
如果不固定.那你就只来回嵌套了.
❸ SQL怎么取字符串中的数字
1、创建测试表,
create table test_str(id int, v_str varchar2(20));
❹ 如何把SQL SERVER中一个含有数字的字符串找出来
在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:
1. convert(int,字段名) 例如:select convert(int,'3')
2. cast(字段名 as int) 例如:select cast('3' as int)
其实,一般情况下没有必要把字符串转换为数字类型
假如需要比较两个字段是否相等,但是一个字段为字符串类型,一个为数字类型,用“=”比较两个值是否相等时,SQL SERVER会自动把字符串转换为数字再比较的!
例如:
select da.TITLE_NAME,dsc.NAME
from dbo.DV_DUTY dd
inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA)
left join DV_ASSET da on(da.ID=dd.RECORD_ID and dd.TYPE='2')
where dd.AREA is not null
这个SQl中,inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA) 中dsc.ID为数字类型,dd.AREA为字符类型,相当于这样on(1='1')的判断,这时候就会自动吧字符串的'1'转换为数字类型再比较的。
但是也有弊端,一旦字符类型转换为数字类型出错(说明字符串的确就非数字组成的),SQL就会抛出异常。
SQL SERVER 2005中有判断字段是否为数字的函数:
ISNUMERIC(字段名) -----假如字段是数字类型返回1,不是就返回0
但是好像有的时候不好使,比如:select isnumeric('3,34') 就返回1
说明这个函数对字段值中全是数字但是数字间用“,”和“.”(逗号或点)隔开的都视为数字了!
❺ sql,字符串中取数字
1、创建测试表,
create table test_str(id int, v_str varchar2(20));
❻ sql语句中对一个字段排序,字段中含有字符串和数字,(怎根据数字进行排序)
order by 字段名称+0 desc/asc的形式进行排序
order by 字段名称*1 desc/asc的形式进行排序
❼ SQL怎样取出字符串中的数字
select
casewhenb.FModellike'%=%'thenSUBSTRING(b.FModel,CHARINDEX('=',b.FModel)+1,LEN(b.FModel)-CHARINDEX('=',b.FModel))
whenb.FModellike'%*%'thenSUBSTRING(b.FModel,0,LEN(b.FModel)-CHARINDEX('*',b.FModel))
endas长度
❽ SQL语句提取字符串中数字
问题确认:你是要提取以下划线(_)为分隔符的字串的第三个子字串。
答案:
select
dbo.getpara('14层_303盘区_5307工作面',3,'_')
条件:先要再数据库中加入这个自定议函数。这里免费奉献给你一个有用的函数,用于按指定分隔符提取字串。
create
function
getpara
(@sql
nvarchar(3000),--要分割的原字串。
@sn
int,
--要取第几个
@deli
varchar(1))--分隔符
returns
varchar(1000)--返回值
as
begin
declare
@first
int,@last
int,@result
varchar(1000),@sn0
int
select
@sn0=0,@first=0,@last=1,@sql=@sql+replicate(@deli,5)
while
@sn0!=@sn
begin
select
@sn0=@sn0+1,@first=@last,@last=charindex(@deli,@sql,@last)+1
end
set
@result=substring(@sql,@first,@last-@first-1)
return
(
@result
)
end
go