我们的SQL Server数据库有一个用于财务期的字符串"2018001“,我使用以下命令将其转换为扁平化日期:
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) AS FP_DATE,
为了按日期汇总销售额并筛选日期,>= '2015-01-01'
最好使用:
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) >= '2015-01-01'
在HAVING
或WHERE
子句中?
例如:
SELECT
SUM(Net_Value),
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) AS FP_DATE
FROM
DB123
WHERE
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) >= '2015-01-01'
GROUP BY
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102)
发布于 2018-06-07 23:30:44
如果可以过滤where
子句中的条件,通常会更好。
在聚合之前进行过滤通常意味着聚合的行数更少--因此性能更好。
在某些(相当罕见的)情况下,where
子句中的过滤可能会阻止索引的使用或最佳统计信息的生成,从而导致更糟糕的查询计划。我相信这是相当罕见的。
https://stackoverflow.com/questions/50745049
复制相似问题