Какой самый простой способ использовать T-SQL / MS-SQL для добавления строки к существующим ячейкам таблицы?

У меня есть таблица со столбцом «имя файла». Недавно я выполнил вставку в этот столбец, но в спешке забыл добавить расширение файла ко всем введенным именам файлов. К счастью, это все изображения формата .jpg.

Как я могу легко обновить столбец «имя файла» этих вставленных полей (при условии, что я могу выбрать последние строки на основе известных значений идентификатора), чтобы включить расширение «.jpg»?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
11
0
24 909
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Решение:

UPDATE tablename SET [filename] = RTRIM([filename]) + '.jpg' WHERE id > 50

RTRIM требуется, потому что в противном случае для конкатенации строк будет выбран столбец [filename] целиком, т.е. если это столбец varchar (20), а имя файла состоит всего из 10 букв, тогда он все равно выберет эти 10 букв, а затем 10 пробелов. Это, в свою очередь, приведет к ошибке, когда вы попытаетесь уместить 20 + 3 символа в поле длиной 20 символов.

Включают ли значения варchar пробелы в выражениях или только поля символ фиксированной длины?

Mark Cidade 20.08.2008 15:25

Я не уверен - поле, с которым я работал, было варchar (50), и оно включало интервал, который, как я согласен, кажется противоречащим идее varchar. Возможно, кто-то может просветить нас относительно того, почему varchar включает пробелы при выборе?

Matt Mitchell 21.08.2008 04:16

Если ваш столбец имел данные в виде поля char (50) и был изменен на varchar (50), дополнительные пробелы будут перенесены.

Nielsvh 16.11.2016 02:24

Думаю, хороший простой.

update MyTable
set filename = filename + '.jpg'
where ...

Обновлено: Ooh +1 to @ MattMitchell ответ на предложение rtrim.

Ответ MattMitchell верен, если столбец представляет собой CHAR (20), но неверен, если это был VARCHAR (20), а пробелы не были введены явно.

Если вы все же попробуете его в поле CHAR без функции RTRIM, вы получите ошибку "Строка или двоичные данные будут проигнорированы".

Я не уверен - поле, с которым я работал, было варchar (50), и оно включало интервал, который, как я согласен, кажется противоречащим идее varchar. Возможно, кто-то может просветить нас относительно того, почему varchar включает пробелы при выборе?

Matt Mitchell 21.08.2008 04:16

Если исходные данные были получены из столбца или переменной типа char (до того, как они были вставлены в эту таблицу), тогда к исходным данным были добавлены пробелы, прежде чем они стали varchar.

DECLARE @Name char(10), @Name2 varchar(10)
SELECT
  @Name = 'Bob',
  @Name2 = 'Bob'

SELECT
  CASE WHEN @Name2 = @Name THEN 1 ELSE 0 END as Equal,
  CASE WHEN @Name2 like @Name THEN 1 ELSE 0 END as Similiar

Урок жизни: никогда не используйте char.

А! Это был импорт Excel с помощью инструмента импорта SQL.

Matt Mitchell 27.02.2009 16:17

Ответ на загадку конечных пробелов можно найти в ANSI_PADDING

Для получения дополнительной информации посетите: НАБОР ANSI_PADDING (Transact-SQL)

По умолчанию ANSI_PADDIN ON. Это повлияет на столбец только при его создании, но не на существующие столбцы.

Прежде чем запускать запрос на обновление, проверьте свои данные. Это могло быть скомпрометировано.

Выполните следующий запрос, чтобы найти скомпрометированные строки:

SELECT *
FROM tablename 
WHERE LEN(RTRIM([filename])) > 46 
-- The column size varchar(50) minus 4 chars 
-- for the needed file extension '.jpg' is 46.

В этих строках либо потеряны некоторые символы, либо недостаточно места для добавления расширения файла.

Я хотел отрегулировать "Урок жизни" Дэвида Б. Я думаю, это должно быть «никогда не использовать char для строковых значений переменной длины» -> Тип данных char может использоваться, но не так много, как думают некоторые :)

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