年初至今的销售数据

时间:2019-05-23 19:14:12

标签: sql sql-server

尝试获取上一年的最新销售数据并实时获取。 尝试包含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 :(得分:0)

您正在尝试将varchar与某个日期进行比较,该日期会给您带来错误。为什么不将InvDate保留为日期类型?

答案 1 :(得分:0)

根据查询表单判断,const getData = () => { console.log("Use these vars directly", search, location); }; const getDataMemo = useCallback(getData, [search, location]); useKeyDown("Enter", getDataMemo); 可能是一个整数。大概像invdate。 您还必须将20190523的结果转换为int。

getdate()

Sql服务器的优先级规则希望将您的8位整数转换为日期时间,该日期时间远远超过了仅支持2,958,463的日期时间的最大值。

在我看来,这是一种存储日期的糟糕方法。而且,如果您不关心时间分量,可以使用... where datebase1.invdate <= convert(int,convert(varchar(8),getdate(),112)) 的数据类型,该数据类型每个仅使用3个字节,而不是每个date的4个字节