Как я могу объединить данные в таблице БД с помощью оператора SQL? - PullRequest
0 голосов
/ 12 марта 2009

У меня есть интересная проблема для Interbase. У меня есть набор записей, который, помимо прочего, имеет поле ввода данных и отметку времени для каждой записи. Я хотел бы иметь возможность скопировать метку времени из записей, чтобы в конце дня последнее поле читалось следующим образом:

TIMESTAMP <Carriage return> <carriage return> Original data in field

Таким образом, окончательный вид при отображении поля:

time of entry

data that was entered

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

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

В прошлом мне удавалось добавлять фиксированные данные в конец строки, используя || для конкатенации с инструкцией UPDATE (data || дополнительная информация, которая одинакова для всех записей "), но мне было трудно эта работа в формате:

result of search||original data 

Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 12 марта 2009
UPDATE FOO_TABLE
  SET DATA_ENTRY_FIELD = DATA_ENTRY_FIELD || TIMESTAMP_FIELD
WHERE ...;

Это должно работать (при условии, что у DATA_ENTRY_FIELD есть место для объединения). Пожалуйста, уточните, какие у вас проблемы, если они не работают.

0 голосов
/ 15 марта 2009

Ответ Крейга должен сработать, хотя, если вы хотите, чтобы каретка возвращалась, вам тоже нужно вставить их:

UPDATE  foo_table
SET     data_entry_field = timestamp || '\n\n' || data_entry_field
WHERE   ...

(Предполагая, что Interbase принимает \n в качестве возврата каретки - что в действительности должно быть просто \r или даже \r\n в Windows, но \n является довольно стандартным.)

MySQL не распознает оператор конкатенации ||, поэтому вам придется использовать функцию CONCAT(). Interbase может быть таким же.

...