2015-04-16 62 views
-2

我想從1.2.3得到值1.23。同樣,我也從1.2.3 ... x中得到值1.2.3 ... x。我怎樣才能在SQL中做到這一點?從SQL 1.2.3返回1.23?

後,我得到數串本主題:現在How to get number from String sql

,這個值是1.2.3。當我施放時,sql注意到一個錯誤:「將數據類型nvarchar轉換爲浮點數時出錯」並且我想從1.2.3返回值1.23

+0

你需要提供你嘗試過什麼,所以更多的數據和實例。 – ScarletMerlin

+0

@ScarletMerlin:嗯,不是真的。這裏有足夠的答案來回答這個問題,無論海報是否投入了很多精力。 –

+0

@NathanTuggy我知道你可以建立一個簡單的查詢來格式化一個字符串,以提供所需的結果。問題在於我們沒有解決問題的背景。 – ScarletMerlin

回答

0

你也可以使用的STUFFREPLACECHARINDEX組合來實現你所需要的。該解決方案節省了.第一的位置,取代其他所有的小數點,然後充塞回。像這樣的事情

;WITH CTE AS 
(
    SELECT '1.23' as CharCol 
    UNION ALL SELECT '6.7.1.' 
    UNION ALL SELECT '4.2.3' 
    UNION ALL SELECT '1.46' 
    UNION ALL SELECT '5.43' 
    UNION ALL SELECT '90' 
) 
SELECT 
    CASE WHEN CHARINDEX('.',CharCol) = 0 
     THEN CharCol 
     ELSE STUFF(REPLACE(CharCol,'.',''),CHARINDEX('.',CharCol),0,'.') 
    END 
FROM CTE; 
+0

謝謝,這個好主意! – Bader

0

您可以使用SUBSTRING,REPLACE和PATINDEX的醜陋組合。類似於

SELECT 
    SUBSTRING(a, 1, PATINDEX('%.%', a) - 1) AS pre 
    ,REPLACE(SUBSTRING(a, PATINDEX('%.%', a), LEN(a)), '.', '') AS post 
    ,SUBSTRING(a, 1, PATINDEX('%.%', a) - 1) + '.' + REPLACE(SUBSTRING(a, PATINDEX('%.%', a), LEN(a)), '.', '') AS result 
FROM (
    SELECT 
     '1.2.3' AS a 
    ) I 

前後列是兩個半部分,附加了一個'。'。在結果列中。

之前的數字'。'將保留在之前,而第一個'之後的任何數字。將''放在一起後。 例如 432.546.3.132.6 = 432.54631326

+0

如果a爲1,則SQL將注意到錯誤:「無效的傳遞給LEFT或SUBSTRING函數的長度參數」 – Bader

+0

CASE WHEN LEN(a)> 1 THEN ... ELSE a END – Tsarin

+0

如果'a'是整數值,則值不包含'。',查詢將會出錯 – Bader