Я полагаю, что по той же причине, что и не компилируется:
short s1 = GetShort1();
short s2 = GetShort2();
short s3 = s1 + s2;
I.e. что всякий раз, когда короткий используется для чего-то, он получает повышение до int.
Сделайте следующее:
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp",
scan_created_date = COALESCE(scan_created_date, "current_unix_timestamp")
WHERE id = X
Функция COALESCE
выбирает первое ненулевое значение. В этом случае он обновит метку даты scan_created_date, чтобы она была такой же, если она существует, иначе потребуется все, что вы замените "current_unix_timestamp"
на.
Я думаю, что вы ищете IF ()
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp",
scan_created_date = IF(scan_created_date IS NOT NULL, "current_unix_timestamp", NULL)
WHERE id = X
mySQL имеет функцию IFNULL
, поэтому вы можете:
UPDATE newspapers
SET scan_notes = "data",
scan_entered_by = "some_name",
scan_modified_date = "current_unix_timestamp"
scan_created_date = IFNULL( scan_created_date, "current_unix_timestamp" )
WHERE id = X
Вы можете использовать COALESCE (), который возвращает первое значение NON-NULL):
scan_created_date = COALESCE(scan_created_date, "current_unix_timestamp")
Вы можете сделать что-то вроде этого:
UPDATE newspapers a, newspapers b
SET a.scan_notes = "data",
a.scan_entered_by = "some_name",
a.scan_modified_date = "current_unix_timestamp",
b.scan_created_date = "current_unix_timestamp"
WHERE a.id = X AND b.id = X AND b.scan_created_date is not NULL