使用SQL查询删除十进制值

时间:2015-01-07 15:18:09

标签: sql sql-server

我在数据库表中有以下值:

12.00
15.00
18.00
20.00

我想从所有值中删除所有小数ZEROS,那么我该如何使用SQL查询来执行此操作。我尝试替换查询,但这不起作用。

我想要的价值如下:

12
15
18
20

我的替换查询:

       select height(replace (12.00, '')) from table;

请帮忙。

8 个答案:

答案 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)那么有两种选择: -

  1. 在Select Clause
  2. 中将此列强制转换为int
  3. 或者您可能想更新此列值,如(12,15,18,20)。
  4. 要申请,首先非常简单,只需使用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}