例:列1
--------------
B978_722
A9786_721
C80516_6
我想取_后面的字符,将转成int型结果如下:列1
--------------
722
721
6请问这条语句如何写,谢谢。
--------------
B978_722
A9786_721
C80516_6
我想取_后面的字符,将转成int型结果如下:列1
--------------
722
721
6请问这条语句如何写,谢谢。
解决方案 »
- sql查表中的10到20条记录怎么查??
- 求SQL语句…50点数
- SQL SERVER 安全控制
- 将数据类型 varchar 转换为 datetime 时出错。
- SQL按照不同类别随机选择若干行数据
- 为视图创建了索引,出现的问题~~~急
- 关于联表数据查询
- [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。
- 关于SQL SERVER的安装。
- 如果将一个表中的内容传输到另一个表中,源表没有主键,而目的表有主键,传输数据的时候是否会发生漏传呢?!
- SQL中时间段的问题
- 取得远程数据库服务器的数据,在查询分析器里成功,但写到存储过程里就出错了.请看代码.
from tb
drop table tb
Go
Create table tb([列1] nvarchar(9))
Insert tb
select N'B978_722' union all
select N'A9786_721' union all
select N'C80516_6'
Go
select 列1=right(列1,len(列1)-charindex('_',列1))
from tb
/*
列1
---------
722
721
6*/
select convert(int, substring('B978_722',charindex('_','B978_722')+1,len('B978_722')))--------
722
这个语句当列中的字符为Asss_050时,会出现转换错误,谢谢了。
drop table tb
Go
Create table tb([列1] nvarchar(9))
Insert tb
select N'B978_722' union all
select N'A9786_721' union all
select N'C80516_6' union all
select N'Asss_050'
Go
select 列1=cast(right(列1,len(列1)-charindex('_',列1))as int)
from tb
/*
列1
-----------
722
721
6
50(4 個資料列受到影響)
*/
cast(right(col1,charindex('_',reverse(col1))-1) as int)
from
(values('B978_722'),
('A9786_721'),
('C80516_6'),
('Asss_050')
)
tb(col1)
-----------
722
721
6
50(4 行受影响)
SELECT STUFF(col1,1,CHARINDEX('_',col1),'')
FROM ...貌似这种写法需要使用函数的次数和引用字段的次数都最少。
有时SUBSTRING不方便的地方,用STUFF恰恰好。