Функция GETDATE() возвращает ошибку «Ошибка преобразования при преобразовании символьной строки в тип данных smalldatetime».

#sql #datetime #sql-insert #date-arithmetic

#sql #дата-время #sql-вставка #дата-арифметика

Вопрос:

У меня есть этот оператор insert, который должен добавить строку в эту скопированную таблицу. Итак, моя идея заключалась в том, чтобы использовать функцию GetDate для получения сегодняшней даты, а для другого столбца добавить к ней 30 дней. Когда я получил ошибку, я попытался преобразовать ее, но я не совсем понимаю, в чем проблема. В столбце используется формат smalldatetime.

 INSERT INTO InvoicecopyKJ VALUES 
    (32, 'AX-014-027', 
        GETDATE(), 
        4834.58, 0.00, 0.00, 2, 
        GETDATE()   30,
        'NULL'
    );
 

Ответ №1:

Кажется, вы хотите dateadd() :

 insert into invoicecopykj 
values (
    32, 
    'ax-014-027', 
    getdate(), 
    4834.58, 
    0.00, 
    0.00, 
    2, 
    dateadd(day, 30, getdate()),
    null
);
 

Примечания

  • getdate() возвращает дату и время. Если вам нужна только часть даты, используйте convert(date, getdate()) вместо
  • предположительно, вам нужен литерал null в качестве значения в последнем столбце, а не литеральная строка 'null' (окружающие одинарные кавычки превращают ее в строку)
  • рекомендуется всегда перечислять целевые столбцы для insert , например insert into invoicecopykj (col1, col2, ...)

Комментарии:

1. Спасибо! Я протестировал это, и это сработало. Да, я не знал об dateadd этом, но я постараюсь быть более осведомленным о различных функциях в будущем. Но как в этом случае будет работать перечисление столбцов?

2. @HubertH.: это означает перечисление столбцов вашей таблицы invoicecopykj .