sql приведен из varchar, чтобы удвоить и сэкономить на дубликате ключа

0

Я использую следующий запрос, чтобы сохранить некоторые данные

INSERT INTO table (name,color,value) VALUES ('john','green','0,98')

Все поля имеют тип varchar и в случае дублирования ключа (скажем, john - это ключ) мой запрос должен измениться на

INSERT INTO table (name,color,value) VALUES ('john','green','0,98')
ON DUPLICATE KEY UPDATE value=CAST(value as DECIMAL(??)) + ?? ;

во втором примере я хочу, чтобы значение было значением + = (значение из таблицы) и сохраняло его как varchar, но я не знаю, как это настроить. Google не помог, я нашел несколько примеров здесь, но ничего не сработало, как я хочу.

Теги:
key
casting
varchar

2 ответа

1

Какие СУБД вы используете? Вот пример UPSERT для Postgres, который вы можете попробовать:

INSERT INTO mytable (name, color, value)
VALUES('john', 'green', CAST('0.98' AS DECIMAL(10,2)))
ON CONFLICT (name) DO UPDATE SET
value = mytable.value + CAST('0.98' AS DECIMAL(10,2))
;

Просто замените десятичную точность на то, что вам нужно, и введите правильные имена полей PK. Я не тестировал его, поэтому вам может понадобиться исправить синтаксис. Но это должно дать вам представление о том, как структурировать ваш запрос.

  • 0
    Спасибо за ваше время, я использую MySQL. Это сложно, потому что значения не известны в запросе. Я сделал их напрямую, чтобы принять идею. Запрос будет выполняться через Java, поэтому значения будут установлены в readyStatement, но я думаю, что это более проблематично, чем Java. также последняя строка, которую вы разместили, не должна отличаться? Я имею в виду значение = сделан как десятичный? если да, запрос будет запущен, даже если тип поля varchar? Еще раз спасибо!
  • 0
    Ах, я прочитал ваш вопрос неправильно тогда. Похоже, у вас возникла проблема. КАСТРАЦИЯ ВАРХАРА В ДЕСЯТИЛЕТЕ, верно? Вы получаете сообщение об ошибке? Какие результаты вы видите?
Показать ещё 2 комментария
0

В MySQL вы можете:

INSERT INTO table (name, color, value)
    VALUES ('john', 'green', '0,98')
    ON DUPLICATE KEY UPDATE value = ( VALUES(value) + 0 )+ value;

Это работает следующим образом:

  • VALUES(value) - это значение, передаваемое для обновления.
  • + 0 делает неявное преобразование в число.
  • + value увеличивает существующее значение.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню