sql - 变量声明取决于 getdate
问题描述
我正在尝试使用依赖于 getdate 的变量创建一个语句。
例如,如果getdate()
是 31-05-2021,那么我的变量@peiljaarstart
必须是“2021-01-01”,如果月份getdate() = 1
必须@peiljaarstart
是“2020-01-01”。这在下面的声明中起作用。
问题是要设置的变量@peiljaarend
必须是month(getdate())
负1。带有一个额外的子句,如果是,month(getdate()) = 1
那么变量@peiljaareind
必须是上一年的。
例如,如果日期是 '2021-01'15',
那么变量是 '2020-01-01 到 '2020-12-31'如果日期是“2021-02-01”,
则变量艺术“2021-01-01 到 2021-01-31”
希望有人可以帮助我解决这个问题。
陈述:
declare @peiljaar date
declare @peiljaarstart date
declare @peiljaareind varchar(10)
--bepalen begindatum peiljaar op basis van lopende maand is deze 1 dan vorig jaar meten anders huidig jaar
set @peiljaar = case
when convert(varchar,(month(getdate()))) <> '1' then convert(varchar,(year(getdate())))
else convert(varchar,(year(getdate())-1)) end
set @peiljaarstart = left(@peiljaar,4)
--bepalen einddatum peiljaar lopende maand minus 1 tenzij lopende maand = 1 dan vorig jaar maand 12
set @peiljaareind = convert(varchar, (left(@peiljaar,4)) ) + '-' + SUBSTRING(CONVERT(nvarchar(6),getdate(), 112),5,2) + '-' + SUBSTRING(CONVERT(nvarchar(6),getdate(), 105),1,2)
--show values
select
@peiljaar
, @peiljaarstart
, @peiljaareind
解决方案
您似乎想要当前年份的第一天和最后一天的变量。那将是:
set @yearstart = datefromparts(year(getdate()), 1, 1);
set @yearend = datefromparts(year(getdate()), 12, 31);
推荐阅读
- sql - 在 Redshift 中按秒创建时间戳列表
- java - 为什么 keyclock 显示错误“您已在此会话中作为不同的用户 '0000000021' 进行身份验证。请先注销。”?
- react-native - 反应原生长列表非常慢(使用联系人包时)
- node.js - 如何在更新另一个文档的基础上更新 FIrestore 中的其他文档?
- javascript - Chart.js:如何对数据集的图例进行分组?所以一个切换多个数据集?
- javascript - NodeJS 中的 CAS 身份验证
- php - imagecolorallocate():红色组件超出范围获取验证码图像时出错
- python - 多线程 - 网络抓取 - Python
- java - Android:Java阻止所有输入,除了使用透明视图上下滚动
- javascript - 为什么我的折线图使用多条线连接随机点?(图表.js)