如何获取T-SQL中小数点数最多的货币记录?
How to get money record with most decimals in T-SQL?
如何从具有最多 "active" 小数点的列中获取货币记录。例如,从列表 (0.01
、0.0112
和 0.001
) 中,结果应该是 0.0112
.
我的第一个想法是将值转换为varchar
并获得最大长度的记录。但这没有用,因为如果我不希望它四舍五入,我必须指定长度。这是脚本:
SELECT CONVERT(VARCHAR, CAST(Value as DECIMAL(18, 6))) FROM Table
也许是这样的:
DECLARE @tbl TABLE(ID INT IDENTITY, YourValue MONEY, Explanation VARCHAR(150));
INSERT INTO @tbl VALUES
(0.0,'just zero')
,(0.1,'1 decimal in 0.1')
,(1.1,'1 decimal in 1.1')
,(-1.1,'1 decimal in -1.1')
,(123456789.1,'1 decimal in 123456789.1')
,(1.1234,'4 decimals in 1.1234')
,(1.12345,'4 decimals in 1.12345'); --5 is rounded implicitly
--您不需要所有列,我只是放置它们以可视化中间步骤
SELECT *
,YourValue % 1 AS TrickWithModulo
,ABS(YourValue)-FLOOR(ABS(YourValue)) AS MathSolution
,CAST(ABS(YourValue) % 1 AS FLOAT) AS ConvertedToFloat_no_trailin_zeros
,SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100) JustTheDecimals
,LEN(SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100)) Length_of_JustTheDecimals
FROM @tbl
ORDER BY Length_of_JustTheDecimals DESC;
想法是
- 获取小数部分
- 将其用作字符串
- 去掉前导
0.
- 获取剩余数字的长度
- 对结果集进行排序,使 最长 位小数位于顶部
如何从具有最多 "active" 小数点的列中获取货币记录。例如,从列表 (0.01
、0.0112
和 0.001
) 中,结果应该是 0.0112
.
我的第一个想法是将值转换为varchar
并获得最大长度的记录。但这没有用,因为如果我不希望它四舍五入,我必须指定长度。这是脚本:
SELECT CONVERT(VARCHAR, CAST(Value as DECIMAL(18, 6))) FROM Table
也许是这样的:
DECLARE @tbl TABLE(ID INT IDENTITY, YourValue MONEY, Explanation VARCHAR(150));
INSERT INTO @tbl VALUES
(0.0,'just zero')
,(0.1,'1 decimal in 0.1')
,(1.1,'1 decimal in 1.1')
,(-1.1,'1 decimal in -1.1')
,(123456789.1,'1 decimal in 123456789.1')
,(1.1234,'4 decimals in 1.1234')
,(1.12345,'4 decimals in 1.12345'); --5 is rounded implicitly
--您不需要所有列,我只是放置它们以可视化中间步骤
SELECT *
,YourValue % 1 AS TrickWithModulo
,ABS(YourValue)-FLOOR(ABS(YourValue)) AS MathSolution
,CAST(ABS(YourValue) % 1 AS FLOAT) AS ConvertedToFloat_no_trailin_zeros
,SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100) JustTheDecimals
,LEN(SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100)) Length_of_JustTheDecimals
FROM @tbl
ORDER BY Length_of_JustTheDecimals DESC;
想法是
- 获取小数部分
- 将其用作字符串
- 去掉前导
0.
- 获取剩余数字的长度
- 对结果集进行排序,使 最长 位小数位于顶部