插入前导空格,然后将值插入 varchar(10) 列

问题描述 投票:0回答:2

我正在使用旧程序的 SQL Server 数据库,并且想要批量插入到

SUPPLIERS
表中,该表的键定义为
varchar(10)

问题是旧程序用前导空格填充键来完成 10 个字符,例如(下划线代表空格)

'_______310'   
'_______311'
'______1000' 

我尝试将值转换为

char(10)
但它在末尾添加了空格。我也尝试过使用
space
函数,但问题是对于键 310,我必须添加 7 个空格,但对于键 1000 我需要 6 个空格,因此在简单的 select 或 insert 语句上使此函数动态化会很乱。

如果没有这些空格,这个应用程序将无法正常工作,所以您知道如何在简单的选择或插入语句上添加这些空格吗?

谢谢

sql sql-server t-sql
2个回答
4
投票

您可以将 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 个字符,确保键有前导空格。


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;
© www.soinside.com 2019 - 2024. All rights reserved.