SQL: вычисление от месяца к месяцу - PullRequest
0 голосов
/ 30 октября 2008

Я хочу вычислить для разницы в месяц 2 даты, которые будут возвращать значение с плавающей запятой.

пример:

date1 = '4/23/2008' date2 = '12 / 31/2008'

это будет 7.й месяц. Я хочу найти значение у. Может кто-нибудь дать мне формулу, чтобы сделать это в кодах SQL? Тпй ..

Ответы [ 3 ]

1 голос
/ 30 октября 2008

Поскольку месяцы разной длины, для простоты я собираюсь предположить, что в месяце 30 дней. С точностью до одной цифры это не будет иметь большого значения, но не пытайтесь вычислять новые даты на основе полученного значения, поскольку они не будут на 100% точными.

(я постараюсь найти способ лучше отформатировать это ...)

DECLARE @d1 DATETIME
DECLARE @d2 DATETIME

SET @d1 = '2008-04-23'
SET @d2 = '2008-12-31'

SELECT CONVERT(FLOAT, DATEDIFF(mm, @d1, @d2)) + ROUND(CONVERT(FLOAT, DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, @d1, @d2), @d1), @d2) % 30) / 30, 1)

Это дает:

8.3

Формула учитывает, что между '2008-04-13' и '2008-11-05', DATEDIFF(mm ...) возвращает 7, но на самом деле это не семь месяцев, а меньше. В этом примере возвращается:

6.7
1 голос
/ 30 октября 2008

Нет стандартного sql для универсальной обработки. Это зависит от того, какую базу данных вы используете. По сути, вам необходимо преобразовать две строки даты в формат даты, который используется вашим внутренним механизмом базы данных, и вычесть две даты, что, опять же, будет зависеть от результата вычитания. В Oracle вы будете использовать to_date() для преобразования, и результатом вычитания будет число с плавающей запятой, представляющее время в количестве дней.

Короче, поищите в руководстве по вашей БД раздел об обработке даты или типах данных.

0 голосов
/ 30 октября 2008

Примерный результат для Sql Server;

select cast(datediff(dd, date1, date2) as float) / 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...