在 varchar 数据类型上替换 .0

replace .0 on varchar data type

我有一个 varchar 列,其中的数字带有 .0

此列既有数值数据也有非数值数据。

我首先尝试将数据类型转换为整数,但由于存在非数字数据类型,所以它不会让我。

如何删除 .0(从所有带有 .0 的号码中删除)?

所以,例如,100.0 应该是 100

我没有尝试使用 select、cast 或 truncate,因为我需要实际修改现有数据。

谢谢。

假设您要更新 table...

  • 其中 x = 您的 table 姓名
  • yourfieldname = 您需要更新的字段名称。

.

UPDATE table X 
SET yourfieldName = left(yourfieldname,len(yourieldName)-2) 
WHERE right(yourfieldName,2)='.0')
 -- or perhaps where yourfieldname like '%.0' would be faster...

应该:更新所有以 .0 结尾的字段需要测试以确定哪个 where 子句会更快,具体取决于索引。如果考虑速度。如果不;这是 1 并且完成了...这重要吗?

一定要在 subset/copy table!

上进行测试

假设您在 .0... 或任何非显示字符后没有空格。如果有,您需要 trim 关闭空格并替换非显示字符带有空字符串 ''

的字符

由于该列同时包含数字和非数字数据,仅检查它是否以 '.0' 结尾是不够的。
您还应该检查它是否是一个数值,这可以通过 TRY_CAST():

来完成
UPDATE tablename
SET col = LEFT(col, LEN(col) - 2)
WHERE col LIKE '%.0' AND TRY_CAST(col AS FLOAT) IS NOT NULL

参见demo

另一种选择

例子

Declare @YourTable table (SomeCol varchar(50))
Insert Into @YourTable values
 ('100.0')
,('1001.0')
,('Not Numeric')
,('-200.05')
,('10,250.0')

Update @YourTable
   set SomeCol = format(try_convert(money,SomeCol),'#.######')
 From @YourTable
 Where try_convert(money,SomeCol) is not null

更新后Table

SomeCol
100
1001
Not Numeric
-200.05
10250