Вы можете использовать метод toJSON (), чтобы получить формат стиля DateTime
var today = new Date().toJSON();
// produces something like: 2012-10-29T21:54:07.609Z
Оттуда вы можете очистить его ...
Чтобы получить дату и время:
var today = new Date().toJSON().substring(0,19).replace('T',' ');
Чтобы получить только дату:
var today = new Date().toJSON().substring(0,10).replace('T',' ');
Чтобы получить только время:
var today = new Date().toJSON().substring(10,19).replace('T',' ');
Редактировать: Как уже отмечали другие, это будет только работать на UTC. Посмотрите выше для лучших ответов.
Чтобы ответить на первый:
UPDATE Orders SET Quantity = Quantity + 1 WHERE ...
Чтобы ответить на второй:
Есть несколько способов сделать это. Поскольку вы не указали базу данных, я буду использовать MySQL.
INSERT INTO table SET x = 1, y = 2 ON DUPLICATE KEY UPDATE x = x + 1, y = y + 2
REPLACE INTO table SET x = 1, y = 2
Они оба могут ответить на ваш вопрос. Однако первый синтаксис обеспечивает большую гибкость для обновления записи, а не просто для ее замены (как это делает второй).
Имейте в виду, что для существования обоих должен быть определен UNIQUE ключ ...
Одноэтапный ответ на первый вопрос - использовать что-то вроде:
update TBL set CLM = CLM + 1 where key = 'KEY'
Это очень простой способ сделать это с помощью одной инструкции.
Что касается второго вопроса, то вы не нужно прибегать к специальной SQL-гимнастике СУБД (например, UPSERT
), чтобы получить желаемый результат. Существует стандартный метод обновления или вставки, который не требует конкретной СУБД.
try:
insert into TBL (key,val) values ('xyz',0)
catch:
do nothing
update TBL set val = val + 1 where key = 'xyz'
То есть сначала вы пытаетесь выполнить создание. Если он уже там, игнорируйте ошибку. В противном случае вы создаете его со значением 0.
Затем выполните обновление, которое будет работать правильно, независимо от того:
Это не единственная инструкция, и все же, как ни странно, именно так мы успешно выполняем ее долгое время.
UPDATE Orders Order
SET Order.Quantity = Order.Quantity - 1
WHERE SomeCondition(Order)
Насколько мне известно, в SQL нет встроенной поддержки INSERT-OR-UPDATE. Я предлагаю создать хранимую процедуру или использовать условный запрос, чтобы добиться этого. Здесь вы можете найти набор решений для различных баз данных.
Если я правильно понимаю, обновления должны быть довольно простыми. Я бы сделал следующее.
UPDATE TABLE SET QUANTITY = QUANTITY + 1 and
UPDATE TABLE SET QUANTITY = QUANTITY - 1 where QUANTITY > 0
Вам могут потребоваться дополнительные фильтры, чтобы просто обновить одну строку вместо всех строк.
Для вставок вы можете локально кэшировать некоторый уникальный идентификатор, связанный с вашей записью, и проверять этот кеш и решить, вставлять или нет. Альтернативный подход - всегда вставлять и проверять наличие ошибки нарушения PK и игнорировать, поскольку это избыточная вставка.
, чтобы ответить на второй:
сделайте столбец уникальным и перехватите исключение, если для него установлено то же значение.
@dotjoe Дешевле обновлять и проверять @@ rowcount, делать вставку постфактум.
Исключения являются дорогостоящими && обновления происходят чаще
Предложение: если вы хотите добиться максимальной производительности в своем DAL, сделайте передний конец передачи уникального идентификатора для обновляемой строки, если вставка пуста.
DAL должны быть CRUD, и не нужно беспокоиться о том, что они не имеют состояния.
Если вы сделаете это без сохранения состояния, с хорошими индексами вы не увидите различий со следующим оператором SQL vs 1. ЕСЛИ (выберите верхний 1 * форма x, где PK = @ ID ) Вставить еще обновление