【问题标题】:replace .0 on varchar data type在 varchar 数据类型上替换 .0
【发布时间】:2021-07-20 18:47:56
【问题描述】:

我有一个 varchar 列,其数字为 .0

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

我第一次尝试将数据类型转换为整数,但由于有非数字数据类型,它不会让我。

如何删除 .0(从所有具有 .0 的数字中)?

因此,例如,100.0 应该是 100

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

谢谢。

【问题讨论】:

  • "I have a varchar column...that has numbers" 还有第一个错误 ;)
  • 不一定。如果永远不会对数字进行数学运算; varchar 是有道理的。邮政编码、电话号码、ssn、信用卡号,我永远不会存储为“数字”
  • '1000.0' 应该被修剪,但是 '1,000.0' 呢? '-10.0'? '$1,000.0'?什么时候一个值足够非数字以至于不应该改变?

标签: sql-server tsql sql-update sql-like


【解决方案1】:

由于该列既有数字数据也有非数字数据,仅检查它是否以 '.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

【讨论】:

    【解决方案2】:

    假设你想更新你的表...

    • 其中 x = 您的表名
    • 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 并且完成了......这有关系吗?

    一定要在子集/副本表上进行测试!

    假设您在 .0... 或任何非显示字符之后没有空格。如果有,则需要修剪空格并将非显示字符替换为空字符串 ''

    【讨论】:

    • 如果列需要是数字才能删除,可能需要将 and isnumeric(yourfieldname)=1 添加到您的 where 子句中。
    • 小心ISNUMERIC;它是一个遗留功能,不像人们想象的那样工作。下面是一些 ISNUMERIC 将返回 1 的表达式。 '.','-.','$','+'。正如 forpas 所展示的那样,TRY_CAST 是可行的方法。
    【解决方案3】:

    只是另一种选择

    示例

    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
    

    更新后的表格

    SomeCol
    100
    1001
    Not Numeric
    -200.05
    10250
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2020-12-06
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      相关资源
      最近更新 更多