Sql server 获取我的Id的右侧号码
我有一个返回ID的查询Sql server 获取我的Id的右侧号码,sql-server,Sql Server,我有一个返回ID的查询 SELECT Id from MyTable; 结果是这样的: 2400044 243000178 12300044 现在我只想得到000右边的数字(三个零) 因此: 使用SUBSTRING和CHARINDEX函数,如下所示: DECLARE @myNumber VARCHAR(50)='2400057744' SELECT REVERSE(SUBSTRING(REVERSE(@myNumber),0,CHARINDEX('000',REVERSE(@myNumber
SELECT Id from MyTable;
结果是这样的:
2400044
243000178
12300044
现在我只想得到000右边的数字(三个零)
因此:
使用
SUBSTRING
和CHARINDEX
函数,如下所示:
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)
使用patindex()
和substring()
函数获取右侧值
select
substring(Id, patindex('%[0][0][0]%', Id)+3, len(Id)) Id
from MyTable
使用CHARINDEX()和子字符串()的解决方案
如果在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。如果ID为INT或BIGINT,则带有非数字字符(0-9)的Float或varchar将失败,返回值不超过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
使用
RIGHT
function该怎么办:“200030004”?如果没有“000”怎么办?目标数字是否可以超过3。ID是整数还是字符?是否可以按照其他人的建议向问题中添加更多数据,以测试20003000101的代码。output将返回101如果数字为100012345@t-克劳森,谢谢。我没想到会有5位数。我已经调整了,将1000改为100000。但这不是通用的…)1000123456将返回23456。似乎有点arbitrary@plaidDK这是一种“攻击”。你的语感和我的不同。如果Id为和整数,则不起作用。但可以强制转换为整数。如果在000上找不到匹配项,则返回数字。也许这就是OP想要的。@狗仔队你说得对,我把我的剧本从以前的版本改了。更正了评论
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