Я хочу преобразовать разницу между двумя датами, используя DATEDIFF, в целое число

#sql #ruby-on-rails #sql-server

Вопрос:

Для проекта Rails, над которым я сейчас работаю, мне нужно проверить, не превысила ли текущая дата определенный период времени (65% от даты начала — даты окончания). Поэтому я создал этот запрос с активной записью:

 Mentoropleiding.joins(:sectoraal_partnerschap, mentor: [{ 
onderneming_mentoren: :onderneming}]).where(mentoropleidingen: { 
status: 3 }).where('CONVERT(int,eind_datum_opvolging) > 
(DATEDIFF(day, eind_datum_opvolging, start_datum_opvolging) * 
0.65)')
 

Но если я запускаю этот sql, я получаю сообщение об ошибке:

 ActiveRecord::StatementInvalid (TinyTds::Error: Explicit conversion from data type date to int is not allowed.)
 

Итак, проблема в этой строке:

 CONVERT(int,eind_datum_opvolging)
 

Я пытаюсь преобразовать дату в int, но это запрещено. Кто-нибудь знает, как преобразовать DATEDIFF результат в целое число?

Спасибо за вашу помощь,

Энтони

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

1. Результатом datediff() является целое число. Нет необходимости в преобразовании. Тем не менее, этот код не должен генерировать эту ошибку. Я бы предложил предоставить примеры данных, желаемые результаты и примеры кода, который на самом деле не работает.

2. спасибо Гордону, я попытался использовать datediff без преобразования, это полный sql-запрос: Mentoropleiding.joins(:sectoraal_partnerschap, наставник: [{ onderneming_mentoren: :onderneming}]). где(mentoropleidingen: { статус: 3 }).где(‘eind_datum_opvolging > (DATEDIFF(день, eind_datum_opvolging, start_datum_opvolging) * 0,65)’) но когда я запускаю это, я также получаю ошибку: ActiveRecord::StatementInvalid (TinyTDS::Ошибка: Столкновение типов операндов: дата несовместима с числовой)

3. Проблема не в DATEDIFF том , а в том факте, что вы сравниваете дату с ее результатом (т. Е. eind_datum_opvolging > (DATEDIFF(day, eind_datum_opvolging, start_datum_op volging) * 0.65) Таким образом, вы пытаетесь определить, больше ли дата, чем число, следовательно, ваша ошибка

4. Привет, Гарет, да, я заметил это сейчас, но я попытался преобразовать дату в int следующим образом: ПРЕОБРАЗОВАТЬ(int, eind_datum_opvolging) Но затем я получаю ошибку: ActiveRecord::StatementInvalid (TinyTDS::Ошибка: Явное преобразование типа данных date в int не допускается.)

5. Даже если бы вы могли преобразовать дату в int, я не думаю, что это то, что вам нужно в данном случае. Ваша логика относится к желанию, чтобы текущие дни прошли до даты окончания, но на самом деле вы никогда не ссылаетесь на текущую дату…. Я думаю, ты хочешь чего-то вроде: DATEDIFF(DAY, eind_datum_opvolging, GETDATE()) > (DATEDIFF(day, eind_datum_opvolging, start_datum_opvolging) * 0.65)