【发布时间】:2021-09-13 17:54:25
【问题描述】:
CREATE VIEW [Myview] AS
SELECT
CASE
WHEN
DATENAME(dw,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))='Sunday'
THEN
SELECT
cast(DATEPART(yyyy, getdate()-7) as varchar(4)) as YEAR,
RIGHT('00'+cast(DATEPART(ww, getdate()-7) as varchar(2)),2) as WEEK;
ELSE
SELECT
cast(DATEPART(yyyy, getdate()-14) as varchar(4)) as YEAR,
RIGHT('00'+cast(DATEPART(ww, getdate()-14) as varchar(2)),2) as WEEK;
GO
创建时出错:Msg 103010, Level 16, State 1, Line 1 Parse 第 8 行错误,第 3 列:'SELECT' 附近的语法不正确。
帮我解决这个错误。 我想检查一年中的第一天是否是星期日,然后我会遵循 then 语句。然后语句建议获取周id和年份。enter image description here
【问题讨论】:
-
请提供示例数据、所需结果以及您要实现的逻辑的说明。你的代码至少不能帮助我理解你想要做什么。
-
VIEW的定义中有 2 个SELECT,但后者在CASE表达式 内部。您还有 2 个语句(CASE中间有语句终止符 (;),但VIEW是一个伪表,其定义由 single 语句定义。另外,需要强调的是,CASE是一个表达式,而不是一个语句;它返回一个有效的标量,您正在尝试在其中定义 2 列。快速阅读CASE表达式 documentation 会告诉你你的语法有多么错误。 -
事实上,上面的内容甚至不应该是
VIEW。它不会从任何表中返回数据。我怀疑,最好写成 inline 表值函数。 -
没有 FROM 子句?!?
-
所以当我使用以下查询时: cast(DATEPART(yyyy, getdate()-7) as varchar(4)) as YEAR, RIGHT('00'+cast(DATEPART(ww, getdate ()-7) as varchar(2)),2) as WEEK 它为我提供了当前年份和当前周的表格输出。但是我想实现这个条件: DATENAME(dw,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))='Sunday'
标签: sql sql-server ssms ssms-2014