求教如何把0004,0013,0177,2999,这样的四位字符变为INT?

xiong1000 2007-11-12 01:32:24
现在偶有这样的varchar

ABCDEFGHOPQRS0001
ABCDEFGHOPQRS0002
..........
ABCDEFGHOPQRS0121
...........
ABCDEFGHOPQRS9391
...
等等,17位的,最前面的13位为阿拉伯数字,最后的四位为数字(如果不足四位前面添加0)
我希望得到后门的四位并且转换为INT,
比如0001 就变为1 0012变为12,0111变为INT 111,9953变为INT9953
请问SQL 语句如何的写,求教求教!!!
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
河蟹哥哥 2007-11-12
  • 打赏
  • 举报
回复
cast(right(字段,4) as int) as xx from table


pt1314917 2007-11-12
  • 打赏
  • 举报
回复

ABCDEFGHOPQRS0001
ABCDEFGHOPQRS0002
..........
ABCDEFGHOPQRS0121
...........
ABCDEFGHOPQRS9391
...
等等,17位的,最前面的13位为阿拉伯数字,最后的四位为数字
-------------------------------------------------
declare @sql varchar(17)
set @sql='ABCDEFGHOPQRS0001'
select cast(right(@sql,4) as int)

另外发现楼主这句话搞笑。“17位的,最前面的13位为阿拉伯数字”,楼主,你的意思是"ABCDE..."这个是阿拉伯数字??
估计我们伟大的阿拉伯人民听到这句话会疯的。呵呵
yangjiexi 2007-11-12
  • 打赏
  • 举报
回复
select convert(int,right(columnname,4)) from tablename

这样也可以
xh831213 2007-11-12
  • 打赏
  • 举报
回复
cast(substring(列名,13,4)as int)
samfeng_2003 2007-11-12
  • 打赏
  • 举报
回复

create function dbo.regexReplace
(
@source varchar(5000), --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 0, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)

exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end
return @result
end
GO
CREATE TABLE T
(
COL VARCHAR(50)
)
INSERT INTO T
SELECT 'ABCDEFGHOPQRS0001' UNION ALL
SELECT 'ABCDEFGHOPQRS0002' UNION ALL
SELECT 'ABCDEFGHOPQRS0121' UNION ALL
SELECT 'ABCDEFGHOPQRS9391'


SELECT RE = CAST(DBO.regexReplace(COL,'[^0-9]','',1,1) AS INT)
FROM t


DROP TABLE T
DROP FUNCTION regexReplace

RE
-----------
1
2
121
9391

(所影响的行数为 4 行)
昵称被占用了 2007-11-12
  • 打赏
  • 举报
回复

select cast(right(字段名,4) as int) as x
from tablename
boblaw 2007-11-12
  • 打赏
  • 举报
回复

SELECT CAST(RIGHT(ColumnName,4) AS INT) FROM TableName
xiong1000 2007-11-12
  • 打赏
  • 举报
回复
没有人知道吗??

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧