Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL查询删除十进制值_Sql_Sql Server - Fatal编程技术网

使用SQL查询删除十进制值

使用SQL查询删除十进制值,sql,sql-server,Sql,Sql Server,我在数据库表中有以下值: 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 co

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

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-to-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替换为“”,但这不会产生您想要的结果

第二,您正试图直接对十进制进行替换。必须对字符串执行替换,因此必须强制转换

有很多方法可以获得您想要的结果,但是这种替换方法是有效的(假设您的列名为“height”:

编辑:

这个脚本的工作原理是:

DECLARE @Height decimal(6,2);
SET @Height = 12.00;
SELECT @Height, REPLACE(CAST(@Height AS varchar(31)),'.00','');

如果它是十进制数据类型,你知道它永远不会包含小数点,你可以考虑将<强>比例< /Stand >属性设置为0。例如,<代码>十进制(18, 0)< /代码>。这将省去你替换“代码>”、“00”< /代码>字符,并且查询会更快。在这种情况下,不要忘记检查是否“防止保存选项”已禁用(

SSMS菜单“工具>选项>设计器>表和数据库设计器>防止保存需要重新创建表的更改”

另外,您当然可以使用SQL查询将其删除:

select replace(cast([height] as varchar), '.00', '') from 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)
    

    您的数据类型是带小数点的十进制,比如十进制(10,2)。数据库中的值是12、15、18和20

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

    如果列中只需要整数,则将其数据类型更改为INT。然后使用DECIMAL是没有意义的

    如果您想在该列中显示整数和小数,请使用十进制类型。如果您不喜欢显示值的方式,请在应用程序中对其进行格式化。例如,由该客户端程序决定是否显示小数分隔符的点或逗号。(可从不同位置使用数据库。)


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

    此处列名必须是十进制

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

    列设置为什么数据类型?@ivan.sivak-这是十进制的。保留它们,并在检索时操作从您的表中replace如果您做得正确,应该会起作用。您应该发布您的尝试。但是它会替换所有值并使其不带零吗?这就是您要求的,不是吗?“我想从所有值中删除所有十进制零”我想从所有值中删除.00。是的,它会将“12.00”变成“12”“是的,但您的查询将以这种方式选择,我的意思是不带.00。我希望以一种方式更新所有值,使所有值都变为不带00
    select CAST(columnname AS decimal(38,0)) from table