获取我的身份证的右侧号码

时间:2018-02-19 12:36:17

标签: sql-server

我有一个返回ID的查询。

SELECT Id from MyTable;

结果是这样的:

2400044
243000178
12300044

现在我想只在000(三个零)的右侧获得数字。

所以:

44
178
44

5 个答案:

答案 0 :(得分:2)

当没有找到000匹配时返回原始数字,它将找到第一次出现000并在此之后返回该数字:

DECLARE @t table(a int)
INSERT @t
values(2400044),(243000178),(12300044),(10002000)

SELECT a%(power(10,len(a)-charindex('000',a)))
FROM @t

这要求数字是实际的整数或bigint。带有非数字字符(0-9)的浮点数或varchar将失败

答案 1 :(得分:1)

使用CHARINDEX()和SUBSTRING()

的解决方案
SELECT SUBSTRING([Id], CHARINDEX('000', [Id])+3, LEN([Id]))
FROM MyTable

答案 2 :(得分:0)

使用SUBSTRINGCHARINDEX功能,如下所示:

DECLARE @myNumber VARCHAR(50)='2400057744'
SELECT REVERSE(SUBSTRING(REVERSE(@myNumber),0,CHARINDEX('000',REVERSE(@myNumber)))) 

输出:

2400044 to 44
243000178 to 178
12300044 to 44
200030004 to 4

以表格形式

SELECT a Raw, REVERSE(SUBSTRING(REVERSE(a), 0, CHARINDEX('000', REVERSE(a)))) Number 
from ( values (2400044), (243000178), (12300045), (2430001789), (2430033), (20003000101) 
     ) k(a)

答案 3 :(得分:0)

使用patindex()substring()功能获取右侧值

select 
      substring(Id, patindex('%[0][0][0]%', Id)+3, len(Id)) Id
from MyTable

答案 4 :(得分:0)

假设ID是INT或BIGINT,返回5位或更少:

create table #MyTable (Id int)

Insert Into #MyTable Values (2400044), (243000178), (12300044)

select id%100000 from #MyTable

如果是字符串:

Select Cast(Cast(id as bigint)%100000 as varchar(10)) from #MyTable