datepart 函数在 sql azure 中不起作用

Posted

技术标签:

【中文标题】datepart 函数在 sql azure 中不起作用【英文标题】:datepart function not working in sql azure 【发布时间】:2013-05-10 14:05:39 【问题描述】:

我想像年份一样拆分日期部分并将其分配给存储过程中的变量。 我在 sql azure 中运行该存储过程。它会抛出错误“此版本的 SQL Server 不支持在 'MASTER..spt_values' 中引用数据库和/或服务器名称。

代码:

declare @Year int
SET @Year =DATEPART(YYYY,GETDATE())
create table #SundayDates (Sunday datetime,NextSunday datetime)
INSERT INTO #SundayDates(Sunday,NextSunday)
SELECT max(dates),MAX(DATEADD(DD,+7,dates)) AS last_sunday from
(
    SELECT dateadd(day,number-1,DATEADD(year,@year-1900,0)) AS dates
    FROM MASTER..spt_values WHERE type='p' and
    number between 1 and DATEDIFF(day,DATEADD(year,@year-1900,0),DATEADD(year,@year-1900+1,0))
) as t
WHERE DATENAME(weekday,dates)='sunday' GROUP BY DATEADD(month,datediff(month,0,dates),0)

【问题讨论】:

SET @Year =DATEPART(YYYY,GETDATE()) INSERT INTO #SundayDates(Sunday,NextSunday) SELECT max(dates),MAX(DATEADD(DD,+7,dates)) AS last_sunday from ( SELECT dateadd(day,number-1,DATEADD(year,@year-1900,0)) AS 日期从 MASTER..spt_values WHERE type='p' and number between 1 and DATEDIFF(day,DATEADD(year,@year -1900,0),DATEADD(year,@year-1900+1,0)) ) as t WHERE DATENAME(weekday,dates)='sunday' GROUP BY DATEADD(month,datediff(month,0,dates),0 ) 听起来与DATEPART 无关,只是该函数调用恰好在错误所在的位置附近。但是没有看到任何代码,提供任何帮助有点棘手。 请使用您问题下方的编辑链接添加您的代码。然后,您可以使用 按钮确保其格式正确。 与其给我们一个可怕的迂回问题描述,为什么不直接要求给出当年每个月的最后一个星期日以及下一个星期日的日期呢?这是一个更容易实现的规范。 嗨,我观察到的一件事是我的数据库名称是 betopper,因为错误显示是 Master。我不知道为什么..?感谢您的帮助 【参考方案1】:

此查询给出相同的结果(作为结果集,而不是插入到临时表中,但可以很容易地适应这样做)并且不依赖于错误消息 spt_values 表告诉你是不允许的:

;With Numbers (Num) as (
    select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all
    select 6 union all select 7 union all select 8 union all select 9 union all select 10 union all select 11
), MonthEnds as (
    select DATEADD(month,DATEDIFF(year,'20010101',CURRENT_TIMESTAMP)*12 + n.Num,'20010131') as EndDate
    from Numbers n
), LastSundays as (
    select DATEADD(day,-n.Num,EndDate) as EndDate
    from
        MonthEnds me
            cross join
        Numbers n
    where
        n.Num between 0 and 6 and
        DATEPART(weekday,DATEADD(day,-n.Num,EndDate)) = DATEPART(weekday,'20130512')
)
select EndDate,DATEADD(day,7,EndDate) as FollowingSunday
from LastSundays

【讨论】:

以上是关于datepart 函数在 sql azure 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Delphi 中复制 SQL Server DATEPART(wk, ...) 函数

[转] SQL日期函数dayadd/datediff/datepart

sql分别用日期月年 分组 group by 分组,datepart函数

datediff datepart distinct SQL语句的使用方法有哪些?

为啥这个简单的 SQL 代码在 Azure Databricks 中不起作用?

sql server日期时间函数