Я использую базу данных SQL Server старой программы и хочу выполнить пакетную вставку в таблицу SUPPLIERS
, ключ которой определен как varchar(10)
.
Дело в том, что старая программа заполняет ключ ведущими пробелами, чтобы заполнить 10 символов, например (подчеркивание означает пробел).
'_______310'
'_______311'
'______1000'
Я попытался преобразовать значение в char(10)
, но в конце добавляются пробелы. Я также пытался использовать функцию space
, но проблема в том, что для ключа 310 мне нужно добавить 7 пробелов, а для ключа 1000 мне нужно 6, поэтому сделать эту функцию динамической для простого оператора выбора или вставки будет Ужасный беспорядок.
Без этих пробелов приложение не будет работать должным образом. Есть ли у вас идеи, как добавить эти пробелы в простой оператор выбора или вставки?
Спасибо
Используйте функцию REPLICATE
, чтобы дополнить строку необходимым количеством символов, 10 - LEN(число).
Вы можете использовать функцию ПРАВО вместе с функцией ПРОБЕЛ для динамического расчета и вставки соответствующего количества начальных пробелов. Вот способ сделать это в вашем операторе 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;
Задавая вопрос, вам необходимо предоставить минимальный воспроизводимый пример: (1) DDL и образец набора данных, т. е. таблицы CREATE плюс инструкции INSERT T-SQL. (2) Что вам нужно сделать, то есть логику и попытку реализации вашего кода в T-SQL. (3) Желаемый результат, основанный на примере данных в пункте 1 выше. (4) Версия вашего SQL-сервера (ВЫБЕРИТЕ @@version;).