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。再次谢谢你。只是说,对于类似性质的未来需求,使用用户定义的函数(内嵌函数)将帮助您在选择查询或内部查询中仍然使用它。祝您今天过得愉快。