从SQL中的1.2.3返回1.23?

时间:2015-04-16 02:44:47

标签: sql-server

我想从1.23获取值1.2.3。类似,我也从1.2.3 ... x得到值1.2.3 ... x。我怎么能在SQL?

在本主题中从字符串中获取数字后:How to get number from String sql

现在,此值为1.2.3。当我强制转换时,sql注意到一个错误:“将数据类型nvarchar转换为float时出错”我希望从1.2.3返回值1.23

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您还可以使用STUFFREPLACE以及CHARINDEX的组合来实现您的需求。该解决方案保存了.的第一个位置,替换了所有其他小数点,然后将其重新填入。像这样的东西

;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;