SQL: запускает конфликт типов данных между time и GETDATE()

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-сервер-2008 #sql-server-2008

Вопрос:

Я создал триггер для установки значения времени столбца типа данных time() равным NULL, когда оно когда-либо больше GETDATE ().

Я получаю сообщение об ошибке, которое указывает на конфликт между типом данных столбцов time () и GETDATE (), поскольку GETDATE() извлекает дату и время.

Мой вопрос в том, как я могу получить только временную часть GETDATE (), чтобы использовать ее в моем триггере?

Код запуска:

   create trigger trig1 
  on [dbo].[Products]
  after insert
  as
  update Products
  set ParkingStartTime = null
  from Products
  join inserted i
  on i.ParkingStartTime  = Products.ParkingStartTime 
  where i.ParkingStartTime >= GETDATE();
  

С уважением.

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

1. Какое точное сообщение об ошибке? Если ParkingStartTime является TIME полем, то действительно существует конфликт; вам нужно было бы CAST(GETDATE() AS TIME) , и это предполагает, что дата парковки клиента — сегодня.

2. @ Джон на все руки Сообщение об ошибке является The data types time and datetime are incompatible in the greater than or equal to operator.

Ответ №1:

основываясь на комментарии, вы не можете неявно преобразовать time в datetime — поэтому вам нужно преобразовать его вручную:

 
create trigger trig1    
on [dbo].[Products]   
after insert   
as   
update Products   
set ParkingStartTime = null   
from Products   
join inserted i   
on i.ParkingStartTime  = Products.ParkingStartTime    
where i.ParkingStartTime >= CAST(GETDATE() AS time(7))
  

Ответ №2:

Преобразовать GetDate() только в формат компонента time — 24Hr.

 SELECT CAST(GETDATE() AS time(7)) AS 'time'