【问题标题】:Change a database column type while ignoring conversion errors using SQL更改数据库列类型,同时使用 SQL 忽略转换错误
【发布时间】:2009-06-18 06:01:32
【问题描述】:

这与上一个问题MSSQL: Change type of a column with numbers from varchar to int 类似,但在这种情况下,并非所有原始数据都可以成功地从 varchar 转换为 int。在这些情况下,我希望输出只是NULL

例如,varchar 列中的传入值集将如下所示:{'123', '234', '345', 'A', '456'}。从 varchar 转换为 int 后,我​​希望该列包含值 {123, 234, 345, NULL, 456}。在实践中,我将有大约 99% 的成功率。

虽然一般的解决方案是理想的,但我使用的是 SQL Server 2005,需要在 Transact SQL 中执行更改。

编辑:IsNumeric 建议确实弥补了部分差距,但并不完整。例如,如果数据集包含数字但不包含整数数据,则 IsNumeric 修复不起作用(并且似乎没有 IsInteger)。特别是,以下集合不会转换 {'123.456', '$12'} 根据 SQL Server IsNumeric,它们都是数字,但不会转换为 Int

【问题讨论】:

    标签: sql sql-server tsql types


    【解决方案1】:
    1. 这样运行更新:

      .. 放 OldValue = CASE WHEN ISNUMERIC(Oldvalue) = 1 THEN Oldvalue ELSE NULL END ...

    2. 运行

      ALTER TABLE dbo.Mytable ALTER COLUMN OldValue int --根据需要添加NULL或NOT NULL

    【讨论】:

      【解决方案2】:
      1. 先执行这个:

        更新表集字段 = null 其中 ISNUMERIC(field) = 0

      2. 然后改类型

      【讨论】:

        【解决方案3】:

        经过一个小时的折腾并在其他答案的指导下,这是我想出的:

        1. 清理数据以确保信息能够转换。由于没有 IsInteger 函数,所以使用 IsNumeric 设置为NULL 任何根本无法转换的东西。

        2. 将所有剩余数据转换为MONEY 类型,这将有效地摆脱IsNumeric 之前接受的货币符号。

        3. 将货币类型转换为整数以去除小数。

        4. 最后,更改数据类型。

        以下测试演示了如何使用 SQL:

        CREATE TABLE tbl ( 
            id INTEGER IDENTITY NOT NULL,
            col VARCHAR(20)
        )
        
        INSERT INTO tbl (col) VALUES ('123')
        INSERT INTO tbl (col) VALUES ('ABC')
        INSERT INTO tbl (col) VALUES ('123.456')
        INSERT INTO tbl (col) VALUES ('$12')
        
        UPDATE tbl SET col = CASE WHEN IsNumeric(col) = 1 THEN Convert(INTEGER, (Convert(MONEY, col))) ELSE NULL END
        ALTER TABLE tbl ALTER COLUMN col INTEGER
        
        SELECT * FROM tbl
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-13
          • 1970-01-01
          • 1970-01-01
          • 2012-12-05
          • 2019-02-04
          • 2015-07-13
          • 1970-01-01
          • 2018-01-16
          相关资源
          最近更新 更多