Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在最后,我看到了她。你知道为什么它只在where子句中抛出错误,而在它不存在时不抛出吗?@livingparadox是的,我也只是在看执行计划,因为我明白为什么你会认为EOMONTH()会处理这个问题,但这是一种操作顺序。因此,在解释where子句之前,将_Sql_Sql Server_Date - Fatal编程技术网

Sql 在最后,我看到了她。你知道为什么它只在where子句中抛出错误,而在它不存在时不抛出吗?@livingparadox是的,我也只是在看执行计划,因为我明白为什么你会认为EOMONTH()会处理这个问题,但这是一种操作顺序。因此,在解释where子句之前,将

Sql 在最后,我看到了她。你知道为什么它只在where子句中抛出错误,而在它不存在时不抛出吗?@livingparadox是的,我也只是在看执行计划,因为我明白为什么你会认为EOMONTH()会处理这个问题,但这是一种操作顺序。因此,在解释where子句之前,将,sql,sql-server,date,Sql,Sql Server,Date,在最后,我看到了她。你知道为什么它只在where子句中抛出错误,而在它不存在时不抛出吗?@livingparadox是的,我也只是在看执行计划,因为我明白为什么你会认为EOMONTH()会处理这个问题,但这是一种操作顺序。因此,在解释where子句之前,将对整个数据集的DATEFROMPARTS()部分进行分析。因此,它试图在将日期限制在EOMOUNT()定义的天数之前,将日期设置为2月29日、30日等。你能在你的回答中加上这个解释吗?我接受了你的回答,因为你们都提供了我想要的解释和替代方案。


在最后,我看到了她。你知道为什么它只在where子句中抛出错误,而在它不存在时不抛出吗?@livingparadox是的,我也只是在看执行计划,因为我明白为什么你会认为EOMONTH()会处理这个问题,但这是一种操作顺序。因此,在解释where子句之前,将对整个数据集的DATEFROMPARTS()部分进行分析。因此,它试图在将日期限制在EOMOUNT()定义的天数之前,将日期设置为2月29日、30日等。你能在你的回答中加上这个解释吗?我接受了你的回答,因为你们都提供了我想要的解释和替代方案。
Dates as (
    select try_convert(date, concat(year, '-' month, '-', day)) as  Date
    from Years y cross join
         Months m cross join
         Days
    where try_convert(date, concat(year, '-' month, '-', day)) and
          DAY(EOMONTH(FirstOfTheYear, Month - 1)) >= Day
)
--  Create up to 16 million integers
WITH N AS (SELECT 0 AS N FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7)) T(n))
,    M AS (SELECT 0 AS N FROM N A, N B, N C, N D, N E, N F, N G, N H)
,    Z AS (SELECT ROW_NUMBER() OVER (ORDER BY A.N) AS N FROM M A)

--  Filter only the integers you need; add to a start date
SELECT CAST(DATEADD(DAY, N-1, '2015-01-01') AS DATE) FROM Z
WHERE N < DATEDIFF(DAY, '2015-01-01', '2020-01-01')
;WITH cteTen AS (
    SELECT n FROM (VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) T(n)
)

, cteTally AS (
    SELECT
        N = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1
    FROM
        cteTen t10
        CROSS JOIN cteTen t100
        CROSS JOIN cteTen t1000
        CROSS JOIN cteTen t10000 
)

, cteStartOfNextYear AS (
    SELECT
        StartOfNextYear = s.[Date]
        ,NumOfDaysBetween = DATEDIFF(DAY,DATEADD(YEAR,-5,s.[Date]),s.[Date])
    FROM
        (VALUES (DATEFROMPARTS(YEAR(GETDATE()) + 1, 1, 1))) s([Date])
)

, cteDates AS (
    SELECT
        [Date] = DATEADD(DAY,- t.N, s.StartOfNextYear)
    FROM
        cteStartOfNextYear s
        INNER JOIN cteTally t
        ON t.N <= NumOfDaysBetween
)

SELECT *
FROM
    cteDates
ORDER BY
    [Date]