使用 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) 那么有两个选项:-
- 在 Select 子句中将此列转换为 int
- 或者您可能想要更新此列值,例如 (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}
我在数据库中有以下值 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) 那么有两个选项:-
- 在 Select 子句中将此列转换为 int
- 或者您可能想要更新此列值,例如 (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}