我想从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
答案 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)
您还可以使用STUFF
和REPLACE
以及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;