表CostPrice
的列t1
是货币类型。
CostPrice
列中的数据如下:
141.1938
0.00
147.1041
119.592
1.23
我使用此sql获取十进制数字:
select distinct len(CostPrice-floor(CostPrice))-2 from t1;
但是结果只有2,这是不对的,实际上结果应该是2,3,4。
那么如何修复SQL?
已添加
:StackOverflow不允许我标记该标记,而是要求我编辑问题,所以:
此问题不是this one的重复项。现有的问题在“ float”数据类型上,而这个问题在“ money”上,将“ money”转换为“ varchar”(如在“ anser anser”中一样)将始终返回相同的小数位数,因此无法回答题。
答案 0 :(得分:1)
尝试一下
DECLARE
@money money = 141.1938
SELECT
@money
,SUBSTRING(CONVERT(varchar(20),@money,2), CHARINDEX('.', CONVERT(varchar(20),@money,2)) + 1, LEN(CONVERT(varchar(20),@money,2))) as RESULT
答案 1 :(得分:1)
您可以(独立于区域设置):
convert
将结果转换为整数convert
整数为字符串right
(前小数位)中提取4个字符replace
每个零都用一个空白字符rtrim
删除尾随空格要将其放在表达式中,应为:
LEN(RTRIM(REPLACE(RIGHT('0000' + CONVERT(varchar(20), CONVERT(int, CostPrice*10000)), 4), '0', ' ')))