У меня есть стол со столбцом для разных имен фруктов - Apple, Orange, Banana и т.д. Эти названия фруктов могут иметь дубликаты.
Прямо сейчас, если я делаю SQL Select, я получаю имена как есть. Я хочу изменить данные, чтобы каждое "Яблоко" было заменено "Сладким яблоком", и каждый "Оранжевый" заменяется "Мандарином".
Я знаю, что могу использовать функцию replace
в моих SQL-запросах. Однако я не хочу/не могу изменять свои SQL-запросы. Я пытался оставить изменение SQL как последнее средство, потому что это нужно делать на нескольких скриптах nodejs.
Мне интересно, есть ли какой-то способ в самой базе данных, которая может заставить его автоматически возвращать эти измененные данные. Как фильтр/конвейер/ограничение (я не уверен, что ему называть), который задан в конкретном столбце таблицы и автоматически выполняет эту функцию замены для любых данных, которые запрашиваются из этой таблицы.
Я бы хотел получить ответ в основном Postgres и MySQL и, если возможно, для SQL Server.
У него есть свои недостатки, но вы можете это сделать:
Измените имя столбца Fruit на что-то еще, а затем создайте новый столбец Computed, который делает REPLACE, который вы хотите, в недавно переименованном столбце Fruit, и присвойте этому новому столбцу имя старого столбца, чтобы все ваши существующие запросы попадет в новый столбец.
Недостатком является то, что любые существующие запросы INSERT/UPDATE должны быть изменены на INSERT/UPDATE на новое имя старого столбца.
Ну, идея базы данных - это "сохранение значений". Итак, если вы запрашиваете эти значения, у вас есть только небольшие варианты модификации.
Ваше ожидание обработки явно зависит от вашего языка программирования. Всякий раз, когда вы выводите значение, полученное из базы данных, оберните его, отфильтруйте его - верните все, что вам нужно, вместо хранимого значения, то есть:
public static string filter(value){
if (value == "Apple")
return "Sweet Apple";
if (value == "Orange")
return "Mandarine";
return value;
}
Нет, ближайшими были бы триггеры Insert и Update для замены данных по мере их поступления, но вы не можете переопределять данные, которые запрашиваются, не указав их в запросе. Вы можете создать представление, которое будет отображать замененные строки.