使用 SQL 查询删除小数值

Remove decimal values using SQL query

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

12.00
15.00
18.00
20.00

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

我想要这样的值:

12
15
18
20

我的替换查询:

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

请帮忙。

由于您的所有值都以“.00”结尾,因此不会出现舍入问题,这会起作用

SELECT CAST(columnname AS INT) AS columnname from tablename

待更新

UPDATE tablename
SET columnname = CAST(columnname AS INT)
WHERE .....

只需将 convert/cast 更新为 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

首先,您尝试将整个 12.00 替换为“”,这不会产生您想要的结果。

其次,您正在尝试直接替换小数点。 Replace 必须在字符串上执行,所以你必须 CAST.

有很多方法可以得到你想要的结果,但这个替换会起作用(假设你的列名是 "height":

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','');

如果它是小数数据类型并且您知道它永远不会包含小数位,您可以考虑将 scale 属性 设置为 0。例如 decimal(18, 0).这将使您免于替换 ".00" 字符,并且查询速度会更快。在这种情况下,不要忘记检查 "prevent saving option" 是否被禁用 (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

据我了解您的问题,您有一个 table 列的数据类型为 decimal(18,9)。 该列包含如下数据:-

12.00
15.00
18.00
20.00

现在如果你想在 UI 上显示没有十进制值的记录意味着像 (12,15,18,20) 那么有两个选项:-

  1. 在 Select 子句中将此列转换为 int
  2. 或者您可能想要更新此列值,例如 (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)

您的数据类型是带小数位的 DECIMAL,比如 DECIMAL(10,2)。数据库中的值为 12、15、18 和 20。

12 与 12.0 和 12.00 以及 12.000 相同。这取决于您使用的工具 select 数据,如何显示数字。您的小数点默认为两位数,或者采用您的数据定义中的位置。

如果您只想在列中使用整数,请将其数据类型更改为 INT。那么使用 DECIMAL 是没有意义的。

如果您想要该列中的整数和小数,请继续使用 DECIMAL 类型。如果您不喜欢显示值的方式,请在您的应用程序中设置它们的格式。由客户端程序决定例如是否显示小数点分隔符的点或逗号。 (可以从不同的位置使用该数据库。)

也不要依赖任何数据库或会话设置,例如小数分隔符是一个点而不是逗号,然后在其上使用 REPLACE。这可能对一个人有效,但对另一个人无效。

这里的列名必须是十进制。

select CAST(columnname AS decimal(38,0)) from table

您可以使用地板功能。 示例:

Select FLOOR(${selectedColumn}) from ${tableName}