【问题标题】:SQL Server : filter by year [duplicate]SQL Server:按年份过滤[重复]
【发布时间】:2019-04-02 18:17:47
【问题描述】:
CREATE PROCEDURE mittelwert3 
    @kID INT, @date DATE
AS
    SELECT 
        SUM(((Verkauf.MengePräsentkorb * Präsentkorb.Preis) + 
             (Verkauf.MengeArtikel * Artikel.Preis)) / 365) 
    FROM 
        Verkauf
    INNER JOIN 
        kunde ON kunde.KundeID = Verkauf.KundeID
    INNER JOIN 
        Artikelverkauf ON Artikelverkauf.BestellungID = Verkauf.kaufID
    INNER JOIN 
        Artikel ON Artikel.ArtikelID = Artikelverkauf.ArtikelID
    INNER JOIN 
        Präsentkorbverkauf ON Präsentkorbverkauf.BestellungID = Verkauf.kaufID
    INNER JOIN 
        Präsentkorb ON Präsentkorb.PräsentkorbID = Präsentkorbverkauf.PräsentkorbID
    WHERE 
        kunde.kundeID = @kID 
        AND verkauf.datum = '@date-%%-%%'

如何用日期年份过滤?

因为我尝试的方法不起作用(请参阅查询的最后一行)

乐玩

【问题讨论】:

  • 只是不要在副本中使用已接受的答案。使用使用>=< sytnax 的那个。

标签: sql-server database stored-procedures


【解决方案1】:

给出一个范围是最好的选择。 这些计算将获得参数年份的第一天和下一年的第一天。零可以更改为任何值,但必须保持不变。

CREATE PROCEDURE mittelwert3 @kID int ,@date date
AS
SELECT SUM(((Verkauf.MengePräsentkorb*Präsentkorb.Preis)+ 
    (Verkauf.MengeArtikel*Artikel.Preis))/365) 
FROM Verkauf
INNER JOIN kunde ON kunde.KundeID = Verkauf.KundeID
INNER JOIN Artikelverkauf ON Artikelverkauf.BestellungID = Verkauf.kaufID
INNER JOIN Artikel ON Artikel.ArtikelID = Artikelverkauf.ArtikelID
INNER JOIN Präsentkorbverkauf ON Präsentkorbverkauf.BestellungID = Verkauf.kaufID
INNER JOIN Präsentkorb ON Präsentkorb.PräsentkorbID = Präsentkorbverkauf.PräsentkorbID
WHERE kunde.kundeID = @kID 
AND verkauf.datum >= DATEADD( YY, DATEDIFF( YY, 0, @date), 0)
AND verkauf.datum < DATEADD( YY, DATEDIFF( YY, 0, @date)+1, 0)

【讨论】:

  • 已经通过 YEAR() 函数获得了它,但感谢您的帮助! :)
  • 使用 YEAR() 函数会使查询成为非 SARGable 并最终导致性能问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2021-03-24
  • 2016-06-30
  • 1970-01-01
  • 2022-01-22
  • 2015-09-20
相关资源
最近更新 更多