Обновление нескольких строк значением, рассчитанным из другого столбца - PullRequest
3 голосов
/ 12 февраля 2009

У меня есть таблица со строкой, которая выглядит следующим образом:

( 20091231 48498429, '...', '...')

Первая часть, id, является меткой времени, за которой следует случайное число. (необходимо для работы с другими частями в системе) Данные уже существуют в таблице.

Я хочу создать столбец, отметку времени и извлечь только дату (20091231) и обновить все строки с отметкой времени.

  1. Как я могу сделать это для всех строк с SQL? (т.е. обновить их все с помощью какой-то функции?)
  2. Какое значение по умолчанию мне следует присвоить столбцу, чтобы убедиться, что будущие вставки правильно извлекают дату?

ОБНОВЛЕНИЕ - Пожалуйста, прочитайте комментарии Бобинса в первом ответе на вопрос Джонатана Сэмпсона о том, как мы получили ответ. Это последний запрос, который работал:

UPDATE table SET rdate=substring(convert(rid,char(20)),1,8);

Проблема заключалась в том, что я использовал substring в качестве substring( str, 0, 8 ), тогда как это должно быть substring( str, 1, 8 ). Я думаю, мы все привыкли к 0 в качестве начальной позиции! Больше информации здесь подстрока

Относится к: несколько обновлений в mysql

Ответы [ 4 ]

2 голосов
/ 12 февраля 2009
SELECT SUBSTRING(colDate,0,8) as 'date' 
FROM someTable

Или я ошибаюсь?

UPDATE someTable
SET newDateField = SUBSTRING(colDate,0,8)

Скорее всего, будет работать. Непроверенные.

1 голос
/ 12 февраля 2009

Используйте в своем обновлении суб-выбор (не проверял, и я слишком долго использовал Firebird, так что кто-то проверяет меня здесь).

UPDATE MyTable AS TUpdate
SET MyNewField = (SELECT SUBSTRING(TSub.MyDateColumn,0,8) 
                  FROM MyTable AS TSub 
                  WHERE TSub.MyID = TUpdate.MyID);

Что касается будущих вставок, правильно извлекающих дату, вам потребуется создать триггер на вставке для извлечения даты для этой записи.

0 голосов
/ 12 февраля 2009
UPDATE tbl
SET
   newDateField = SUBSTRING(CAST(sourceCol AS varchar), 0, 8)
0 голосов
/ 12 февраля 2009

Необходимо использовать подвыбор.

ОБНОВЛЕНИЕ someTable set timestamp = (ВЫБРАТЬ ПОДПИСЬ (colData, 0, 8) ОТ someOriginalTable);

РЕДАКТИРОВАТЬ lc получил меня на несколько секунд!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...