Вставьте ведущие пробелы, затем значение в столбец varchar(10)

Я использую базу данных SQL Server старой программы и хочу выполнить пакетную вставку в таблицу SUPPLIERS, ключ которой определен как varchar(10).

Дело в том, что старая программа заполняет ключ ведущими пробелами, чтобы заполнить 10 символов, например (подчеркивание означает пробел).

'_______310'   
'_______311'
'______1000' 

Я попытался преобразовать значение в char(10), но в конце добавляются пробелы. Я также пытался использовать функцию space, но проблема в том, что для ключа 310 мне нужно добавить 7 пробелов, а для ключа 1000 мне нужно 6, поэтому сделать эту функцию динамической для простого оператора выбора или вставки будет Ужасный беспорядок.

Без этих пробелов приложение не будет работать должным образом. Есть ли у вас идеи, как добавить эти пробелы в простой оператор выбора или вставки?

Спасибо

Задавая вопрос, вам необходимо предоставить минимальный воспроизводимый пример: (1) DDL и образец набора данных, т. е. таблицы CREATE плюс инструкции INSERT T-SQL. (2) Что вам нужно сделать, то есть логику и попытку реализации вашего кода в T-SQL. (3) Желаемый результат, основанный на примере данных в пункте 1 выше. (4) Версия вашего SQL-сервера (ВЫБЕРИТЕ @@version;).

Yitzhak Khabinsky 02.07.2024 21:16

Используйте функцию REPLICATE, чтобы дополнить строку необходимым количеством символов, 10 - LEN(число).

siggemannen 02.07.2024 21:26
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать функцию ПРАВО вместе с функцией ПРОБЕЛ для динамического расчета и вставки соответствующего количества начальных пробелов. Вот способ сделать это в вашем операторе 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 крайних правых символов, гарантируя, что ключ имеет ведущие пробелы.

этот справился с задачей, спасибо!

franko_camron 02.07.2024 21:35

Пожалуйста, попробуйте следующее решение.

Он имитирует функцию 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;

Другие вопросы по теме

Похожие вопросы

Запрос Oracle SQL с использованием regexp_substr для получения строки между двумя строками
Создание строк входа и выхода из одной строки
Почему метод Timestamp.of() в java.sql неправильно преобразуется из LocalDateTime в java.time?
Как использовать индекс, если искомый столбец не индексирован, но имеет тот же порядок, что и индексированный первичный ключ
Как получить информацию о самоанализе движка SQLite через Rust SQLx?
Отобразить среднее количество дней между последней и предпоследней транзакцией клиента
Как запросить фрейм данных Snowpark с помощью SQL из Snowflake?
Как устранить ошибку «Ошибка компиляции SQL: объект SNOWPARK_TEMP_STAGE_FLGVIWVUC уже существует». проблема в снежинке?
Как объединить две или более строк и СУММИРОВАТЬ столбец в ОБНОВЛЕНИИ без первичного ключа?
Левая часть выражения LIKE должна иметь значение varchar (фактически: varbinary). Какая альтернатива преобразованию varbinary в varchar?