Sql select语句截断和追加列值

Sql select语句截断和追加列值,sql,sql-server-2012,inner-query,Sql,Sql Server 2012,Inner Query,我有一个包含列的表 [id],[StartsWith],[Length] ,[MinExt] ,[MaxExt],[isDID] ,[DeleteDigits] ,[AppendDigits] 208 , 61 , 5 , 61000 , 61999 , 0 , 2 , 22058 209 , 63 , 5 , 63000 , 63999 , 0 , 2

我有一个包含列的表

[id],[StartsWith],[Length] ,[MinExt] ,[MaxExt],[isDID] ,[DeleteDigits] ,[AppendDigits]

208 ,     61     ,    5    ,  61000  ,  61999 ,   0    ,       2       ,   22058

209 ,     63     ,    5    ,  63000  ,  63999 ,   0    ,       2       ,  26518
现在假设用户发送一个数字,比如61205,我必须通过在MinExt和MaxExt之间进行检查来检查该数字(即61205)存在于哪一行

在此之后,我必须从数字开头的相应deleteDigits中提到的61205中截断x个数字(在这种情况下,2个数字将被截断),在截断之后,我必须在[appenddigits]列的最后追加205个数字。 这将构成一个完整的数字,如22058205


我必须通过select语句来实现这一点,因为它将是一个内部查询。或者,如果有人能提出其他建议,我将非常感激

如果问题中提到的查找表只有很少的行,可以使用多级Case语句来执行此操作。尽管它看起来很麻烦,但它可以在不依赖其他代码的情况下完美地完成这项工作

如果此表可能有许多行,则可能需要使用SQL Server用户定义的函数

试试这个:

DECLARE @VAL NVARCHAR(100) = '61205'

SELECT AppendDigits + SUBSTRING(@VAL, 3, LEN(@VAL) - 2)
FROM   YOUR_TABLE
WHERE  CAST(@VAL AS int) BETWEEN MinExt AND MaxExt

您确定预期结果是22058205吗?截断通常意味着删除最后一个数字,追加通常发生在结尾,所以61222058这个数字对我来说似乎更有意义。每次你都会取最后3个数字还是截断前2个数字?到目前为止你都做了什么?这是家庭作业吗?我会给你一个线索:使用子字符串,使用CAST,使用WHERE和use+运算符…感谢您的回复,但我需要解决方案作为内部查询我将此标记为答案,因为我将我的要求从内部查询更改为存储过程,然后我使用了您的查询。感谢它的帮助。查找表有很多行,超过4000行。对于用户定义的函数,意味着我必须为每个号码调用函数(如果用户发送多个号码)?感谢您的建议,我创建了一个存储过程,然后实现了lopic。再次谢谢你。只是说,对于类似性质的未来需求,使用用户定义的函数(内嵌函数)将帮助您在选择查询或内部查询中仍然使用它。祝您今天过得愉快。