sql-server - 通过设置日期范围查询强制年份基于月份
问题描述
SQL Server 2016 - PowerBI
我需要编写一个静态查询,该查询将在 PowerBI 中用于自动更新自己的仪表板,而不会获得使用我们公司预算周期(7 月 1 日至 6 月 30 日)的任何提示。我可以轻松地从表中提取数据需要它,但这是我坚持的 where 子句。我需要它来查询以显示仅在 7/1/{year} - 6/30/{year} 之间完成的记录。有没有一种方法可以查询显示所有日期之间的记录
(如果月份(getdate())在(1,2,3,4,5,6)然后'7/1/'+年(getdate()))或者如果月份(getdate())在(7, 8,9,10,11,12) 然后 '7/1/' + 年(dateadd(y,-1, getdate()))
和
(如果月份(Getdate())在 (1,2,3,4,5,6' 然后 '6/30/' + year(getdate()) 否则如果月份(getdate()) 在 (7,8) ,9,10,11,12) 然后 '6/30/' + year(datediff(y,1,getdate())))month(getdate()) in (1,2,3,4,5,6 ) 然后 '7/1/' + 年(getdate()))
如果我将该代码写入查询,则在将 varchar 值“7/1/”转换为数据类型 int 时会出现错误错误。我认识到这是 / 行中的一个问题,并试图将一个 int 值附加到一个 varchar 但我似乎无法弄清楚如何解决这个问题。我错过了什么吗?
解决方案
您需要先将YEAR(GETDATE())转换为VARCHAR,这将允许您将字符串 '7/1/' 与年份(字符串)值连接起来。现在您将拥有一个新字符串,例如“7/1/2020”。现在在应用其他条件之前再次将此字符串转换为 DATE。这将如下所示 -
CAST('7/1/'+CAST(YEAR(GETDATE()) AS VARCHAR) AS DATE)
推荐阅读
- html - 当 HTML 文本元素为空时,如何隐藏使用 :before 伪选择器创建的内容?
- angular - 翻译在错误组件 angular2/6 中不起作用
- ios - 个人 Apple 开发者计划中的多个开发者
- gradle - 为什么在构建期间执行我的 gradle 任务会被跳过?
- swift - 添加手势识别器
- r - Try-catch 减慢线性混合效果的模拟
- cocoapods - “UIControlEvents 已重命名为 UIControl.Event”,使用 Xcode 10 和 RxCocoa/CocoaPods
- php - 无法更改 Laravel 的 Auth 表
- jenkins - 是否可以在 GitHub 的 swagger 文档描述中显示?
- python - 将经过训练的神经网络分成两部分并使用后一部分