读书人

sql语句中如何去掉数字后面的字符

发布时间: 2013-11-11 14:02:17 作者: rapoo

sql语句中怎么去掉数字后面的字符
sql语句怎么去掉drug_spec字段中数字后面的字符如mg,g,ml,万u,ug,然后把该字段转化为float型的,除了用replace还有没有其他的方法
示例如下:
durg_spec
0.25ug
0.25ug
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
2.5mg
2.5mg
2.5mg
2.5mg
0.15g
0.15g
0.3g
0.3g
0.2mg
0.2mg
0.2mg
0.2mg
0.2mg
0.2mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
8.8mg
8.8mg
8.8mg
8.8mg
8.8mg
8.8mg
8.8mg
8.8mg
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
1mg
1mg
1mg
1mg
1mg
1mg
1mg
1mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
30mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g






40mg
0.25g
0.25g
0.25g


0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.25g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
2mg
10mg
10mg
10mg
10mg
10mg
10mg
15mg
15mg
15mg
15mg
15mg
15mg
15mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
10mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
25mg
25mg
25mg
10mg
10mg
10mg
0.5mg
0.5mg
0.5mg
0.5mg
0.5mg
0.5mg
0.5mg
0.5mg
0.5mg



5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
25mg
25mg
10mg
30mg
30mg
0.15g
0.15g
50mg
50mg
50mg
50mg
0.3g
0.3g
0.3g
0.3g
25mg
25mg
25mg
25mg


0.2g
0.2g
0.2g


0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.2g
0.25mg
0.25mg
0.25mg
0.25mg
0.25mg
0.25mg
0.25mg
0.25mg
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.1g
0.5g
0.5g
0.5g
0.5g
0.5g
0.5g
40mg
40mg
40mg
40mg
40mg
40mg
40mg
40mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
5mg
25mg
25mg
25mg
25mg
25mg
25mg
25mg
25mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
20mg
0.33g
0.33g
0.33g
0.2g
0.2g
0.25mg
0.25mg
0.25mg
0.25mg
75mg
75mg
75mg
75mg
75mg
75mg
75mg
75mg
0.5g 去掉数字后面的字符
[解决办法]

引用:
请大牛帮忙看一下,谢谢


我用了一部分的数据,你看看是这样不:


;with tb(durg_spec)
as
(
select '0.25ug' union all
select '0.25ug' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '0.5g' union all
select '2.5mg' union all
select '2.5mg' union all
select '2.5mg' union all
select '2.5mg' union all
select '0.15g' union all
select '0.15g' union all
select '0.3g' union all


select '0.3g' union all
select '0.2mg' union all
select '0.2mg' union all
select '0.2mg' union all
select '0.2mg' union all
select '0.2mg' union all
select '0.2mg' union all
select '5mg'
)


select cast(substring(durg_spec,1,patindex('%[a-z]%',durg_spec)-1) as float) as durg_spec
from tb
/*
durg_spec
0.25
0.25
0.5
0.5
0.5
0.5
0.5
0.5
0.5
0.5
0.5
2.5
2.5
2.5
2.5
0.15
0.15
0.3
0.3
0.2
0.2
0.2
0.2
0.2
0.2
5
*/


[解决办法]
引用:
用这段代码报错:
select case when drug_spec is null then drug_spec
else cast(substring(drug_spec,1,patindex('%[a-z]%',drug_spec)-1) as float)
end durg_spec from atf_ypxx

消息 537,级别 16,状态 2,第 2 行
传递给 LEFT 或 SUBSTRING 函数的长度参数无效。


再试试这个:

select case when isnull(durg_spec,'') =''
then null
else cast(substring(durg_spec,1,patindex('%[a-z]%',durg_spec)-1) as float)
end as durg_spec
from tb

读书人网 >SQL Server

热点推荐