2017-04-11 39 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

我將此標記爲答案,因爲我將我的要求從內部查詢更改爲存儲過程,然後使用您的查詢。感謝它幫助。 –