SQL中列的可变精度
我有一列由三种不同类型的数字组成:SQL中列的可变精度,sql,oracle,ddl,sqldatatypes,Sql,Oracle,Ddl,Sqldatatypes,我有一列由三种不同类型的数字组成: 类型1在小数点后没有数字,如5、17等 类型2在小数点后有一位数字,如27.5,11.8等 类型3在小数点后有两位数字,如227.64,35.77等 我希望类型1的数字在小数点后有一个0,这样它们就变成22.0,11.0等等,而类型2和类型3的数字不受影响 可以通过将值推入字符串来完成 DECLARE @table AS TABLE (myValue FLOAT) INSERT INTO @table (myValue) VALUES
- 类型1在小数点后没有数字,如
、5
等17
- 类型2在小数点后有一位数字,如
,27.5
等11.8
- 类型3在小数点后有两位数字,如
,227.64
等35.77
我希望类型1的数字在小数点后有一个0,这样它们就变成
22.0
,11.0
等等,而类型2和类型3的数字不受影响 可以通过将值推入字符串来完成
DECLARE @table AS TABLE (myValue FLOAT)
INSERT INTO @table
(myValue)
VALUES (5),
(17),
(27.5),
(11.8),
(227.64),
(35.77)
SELECT CASE WHEN CAST(myValue AS VARCHAR(20)) LIKE '%.%' THEN CAST(myValue AS VARCHAR(20))
ELSE CAST(myValue AS VARCHAR(20)) + '.0'
END
FROM @table
这充其量是一个糟糕的解决方案。您最好以原始格式维护数据,然后按照Ankit所述在表示层中处理格式。我知道这并不总是可能的,但数据位置并不是这样做的地方。列的数据类型是什么 尝试:
这样做的地方是在表示层中,您可以将值转换为所需格式的字符串。(因为22.0是22,后者是存储的内容)使用应用程序层来实现这一点。必须说明这是Microsoft SQL Server答案,而不是plsql/oracle。希望它能引导您朝着正确的方向前进。这似乎不是一个基于Oracle的解决方案,而这正是OP所追求的(参见标签)。
SELECT
CASE
WHEN LEN(RIGHT([MyColumn], CHARINDEX('.', REVERSE([MyColumn])))) >= 3
THEN [MyColumn]
ELSE CAST(CAST([MyColumn] AS NUMERIC(8,1)) AS NVARCHAR(10))
END AS [MyColumn]
FROM [MyTable]