代码之家  ›  专栏  ›  技术社区  ›  franko_camron

插入前导空格,然后插入varchar(10)中字段的值

  •  1
  • franko_camron  · 技术社区  · 1 年前

    我正在使用一个旧程序的数据库(SQL Server),并希望在SUPPLIERS表上进行批量插入,该表的关键字是varchar(10)。问题是,旧程序用前导空格填充键,以完成10个字符,例如(下划线表示空格) ='_______310', '_______311'..., '______1000'.

    我试图将值转换为char(10),但它在尾部添加了空格。我也试着使用 空间函数 ,但问题是,对于键310,我必须添加7个空格,但对于键1000,6,所以在一个简单的select或insert语句上使该函数动态会非常混乱。

    如果没有这些空间,这个应用程序将无法正常工作,所以你知道如何在简单的select或insert语句中添加这些空间吗?

    谢谢

    2 回复  |  直到 1 年前
        1
  •  2
  •   Mykola Tunyk    1 年前

    可以将RIGHT函数与SPACE函数一起使用,以动态计算并插入适当数量的前导空格。以下是在SQL语句中执行此操作的方法:

    INSERT INTO SUPPLIERS (key_column, other_columns)
    VALUES (RIGHT(SPACE(10) + '310', 10), other_values);
    

    对于批量插入:

    INSERT INTO SUPPLIERS (key_column, other_columns)
    SELECT RIGHT(SPACE(10) + CAST(key AS VARCHAR(10)), 10), other_columns
    FROM (
        SELECT '310' AS key, other_value1 AS other_columns
        UNION ALL
        SELECT '311', other_value2
        UNION ALL
        SELECT '1000', other_value3
    ) AS batch;
    

    RIGHT(SPACE(10) + CAST(key AS VARCHAR(10)), 10) -将10个空格与键连接起来,然后取最右边的10个字符,确保键具有前导空格。

        2
  •  1
  •   Yitzhak Khabinsky    1 年前

    请尝试以下解决方案。

    它模拟LPAD()函数。

    SQL

    -- DDL and sample data population, start
    DECLARE @tbl TABLE (id INT IDENTITY PRIMARY KEY, token VARCHAR(10));
    INSERT INTO @tbl (token) VALUES
    ('310'),
    ('1000');
    -- DDL and sample data population, end
    
    SELECT * 
        , RIGHT(CONCAT(SPACE(10), token), 10) AS result
        , LEN(RIGHT(CONCAT(SPACE(10), token), 10)) AS _length
    FROM @tbl;