我在数据库表中有以下值:
12.00
15.00
18.00
20.00
我想从所有值中删除所有小数ZEROS,那么我该如何使用SQL查询来执行此操作。我尝试替换查询,但这不起作用。
我想要的价值如下:
12
15
18
20
我的替换查询:
select height(replace (12.00, '')) from table;
请帮忙。
答案 0 :(得分:20)
由于您的所有值都以“.00”结尾,因此不存在舍入问题,这将起作用
SELECT CAST(columnname AS INT) AS columnname from tablename
更新
UPDATE tablename
SET columnname = CAST(columnname AS INT)
WHERE .....
答案 1 :(得分:3)
只需使用转换/强制转换为INT:
UPDATE YOUR_TABLE
SET YOUR_COLUMN = CAST(YOUR_COLUMN AS INT)
WHERE -- some condition is met if required
或转换:
UPDATE YOUR_TABLE
SET YOUR_COLUMN = CONVERT(INT, YOUR_COLUMN)
WHERE -- some condition is met if required
要测试你可以这样做:
SELECT YOUR_COLUMN AS CurrentValue,
CAST(YOUR_COLUMN AS INT) AS NewValue
FROM YOUR_TABLE
答案 2 :(得分:1)
首先,您尝试将整个12.00替换为'',这不会产生您想要的结果。
其次,你试图直接替换小数。必须对字符串执行替换,因此必须进行CAST。
有很多方法可以获得您想要的结果,但是这种替换会起作用(假设您的列名是"高度":
REPLACE(CAST(height as varchar(31)),'.00','')
编辑:
此脚本有效:
DECLARE @Height decimal(6,2);
SET @Height = 12.00;
SELECT @Height, REPLACE(CAST(@Height AS varchar(31)),'.00','');
答案 3 :(得分:1)
如果它是十进制数据类型,并且您知道它将永远不会包含小数位,您可以考虑将 scale 属性设置为0.例如decimal(18, 0)
。这样可以避免替换".00"
字符,查询速度会更快。在这种情况下,请不要忘记检查“阻止保存选项”是否已禁用(SSMS menu "Tools>Options>Designers>Table and database designer>prevent saving changes that require table re-creation"
)。
其他,您当然可以使用SQL查询删除它:
select replace(cast([height] as varchar), '.00', '') from table
答案 4 :(得分:1)
据我了解你的问题,你有一个表的列为datatype decimal(18,9)。 该列包含如下数据: -
12.00
15.00
18.00
20.00
现在,如果你想在UI上显示记录而没有十进制值意味着像(12,15,18,20)那么有两种选择: -
要申请,首先非常简单,只需使用select子句
中的强制转换select CAST(count AS INT) from tablename;
但是如果要使用int值更新列数据,则必须更新列数据类型
并且做到了
ALTER TABLE tablename ALTER COLUMN columnname decimal(9,0)
然后执行此
UPDATE tablename
SET count = CAST(columnname AS INT)
答案 5 :(得分:1)
您的数据类型是带有小数位的DECIMAL,例如DECIMAL(10,2)。数据库中的值为12,15,18和20。
12与12.0和12.00以及12.000相同。由您使用的工具来选择数据,如何显示数字。您的默认值为小数位数的两位数,或者取数据定义中的位数。
如果您只想在列中使用整数,则将其数据类型更改为INT。那么使用DECIMAL是没有意义的。
如果您想在该列中使用整数和小数,请使用DECIMAL类型。如果您不喜欢显示值的方式,请在应用程序中对其进行格式化。由客户端程序决定是否显示小数分隔符的点或逗号。 (数据库可以在不同的位置使用。)
也不要依赖任何数据库或会话设置,例如小数分隔符是一个点而不是逗号,然后在其上使用REPLACE。这可以适用于一个人,而不适用于另一个人。
答案 6 :(得分:0)
此处的列名必须为十进制。
select CAST(columnname AS decimal(38,0)) from table
答案 7 :(得分:0)
您可以使用楼层功能。 示例:
Select FLOOR(${selectedColumn}) from ${tableName}