我有一个包含列的表
[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语句执行此操作,因为它将是一个内部查询。或者,如果有人可以提出别的建议,我会非常感激。
答案 0 :(得分:1)
试试这个:
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
答案 1 :(得分:0)
如果问题中提到的查找表包含很少行,则可以使用多级Case语句来执行此操作。虽然它看起来很麻烦,但它可以完美地完成工作而不依赖于其他代码。
如果此表可能包含许多行,则可能需要使用SQL Server用户定义函数。