2017-04-11 40 views
-1

我有一个包含列select语句截断并追加列的值

[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我要检查,在其中一行数(即61205)存在通过检查MinExt和MaxExt之间

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

我必须通过选择语句,因为它将是一个内部查询。或者如果有人可以提出其他建议,我会非常感激。

+0

确定的预期结果为:22058205?截断通常意味着删除最后一个数字,而追加通常会在结尾发生,所以61222058的数字似乎对我更有意义。 – xQbert

+0

每次你会取最后3位数字还是截断前两位数字? – Rams

+1

你到现在为止尝试过什么? – etsa

回答

0

如果您的问题中提到的查询表有几行,那么可以使用多级Case语句来执行此操作。虽然看起来很麻烦,但它会完美地完成工作,而不依赖于其他代码。

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

+0

查找表有很多行超过4000.对于用户定义的函数意味着我必须为每个数字调用函数(如果用户发送多个数字)? –

+0

感谢您的建议,我创建了一个存储过程,然后实现了lopic。再次感谢 –

+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 
+0

感谢您的回复,但我需要解决方案作为内部查询 –

+0

我将此标记为答案,因为我将我的要求从内部查询更改为存储过程,然后使用您的查询。感谢它帮助。 –