我正在使用旧程序的 SQL Server 数据库,并且想要批量插入到
SUPPLIERS
表中,该表的键定义为 varchar(10)
。
问题是旧程序用前导空格填充键来完成 10 个字符,例如(下划线代表空格)
'_______310'
'_______311'
'______1000'
我尝试将值转换为
char(10)
但它在末尾添加了空格。我也尝试过使用 space
函数,但问题是对于键 310,我必须添加 7 个空格,但对于键 1000 我需要 6 个空格,因此在简单的 select 或 insert 语句上使此函数动态化会很乱。
如果没有这些空格,这个应用程序将无法正常工作,所以您知道如何在简单的选择或插入语句上添加这些空格吗?
谢谢
您可以将 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 个字符,确保键有前导空格。
请尝试以下解决方案。
它模拟 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;