Предыдущие данные о продажах с начала года - PullRequest
0 голосов
/ 23 мая 2019

Попытка получить данные о продажах за предыдущий год и получить их в режиме реального времени. Попробовал в том числе оператор where: WHERE DATABASE1.INVDATE <= GETDATE() но получил ошибку:

Ошибка арифметического переполнения при преобразовании выражения в тип данных datetime.

Текущий (обобщенный) запрос:

    SELECT CONVERT(DATE, CAST(DATABASE1.INVDATE AS VARCHAR(8)), 1) AS 'INVDATE',
    CONVERT (DOUBLE PRECISION,DATABASE2.EXTCOSTS) AS 'EXTENDED COST',
    DATABASE1.FISCYR,
    DATABASE1.FISCPER,
    CALENDAR.CalendarYear AS 'CAL YEAR',
    CALENDAR.CalendarPeriod AS 'CAL PERIOD', 

    FROM DATABASE1
    INNER JOIN DATABASE2 ON DATABASE1.TRANSTYPE = DATABASE2.TRANSTYPE
    LEFT JOIN CALENDAR ON (DATABASE1.FISCYR = CALENDAR.FISCALYEAR) AND (DATABASE1.FISCPER = CALENDAR.FISCALPERIOD)

Я пытаюсь собрать все данные о продажах с прошлого года до сегодняшней даты.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Судя по форме запроса, invdate, скорее всего, int. Вероятно, как 20190523. Вам также придется преобразовать результат getdate() в int.

...
where datebase1.invdate <= convert(int,convert(varchar(8),getdate(),112))

Правила приоритета сервера Sql хотят преобразовать ваше 8-значное целое число в дату и время, которое превышает максимальное значение, поддерживаемое для даты и времени, которое составляет всего 2 958 463.

На мой взгляд, это ужасный способ хранить даты. А если вам не важен компонент времени, вы можете использовать тип данных date, который использует только 3 байта на каждый вместо 4 байтов на int

0 голосов
/ 23 мая 2019

Вы пытаетесь сравнить varchar с датой, которая дает вам ошибку.Почему бы не оставить InvDate в качестве типа даты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...