如何在SQL中使用while循环基于日期迭代字符串文字

如何在SQL中使用while循环基于日期迭代字符串文字,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表,我查询该表以提供进程列表。这些进程的命名约定将根据我们当前所在的月份和年份进行更改。因此,对于7月份,它会给我一个“07”,名字中有年份“18”,以此类推。 这是一个测试查询 SELECT SUBSTRING(process_ID , 6, 2) as Procnumber,[process_ID] FROM [Hana].[dbo].[processActivityEvent] v WHERE process_ID like 'AB18-07_shield%' 我使用了一个子字

我有一个表,我查询该表以提供进程列表。这些进程的命名约定将根据我们当前所在的月份和年份进行更改。因此,对于7月份,它会给我一个“07”,名字中有年份“18”,以此类推。 这是一个测试查询

SELECT SUBSTRING(process_ID , 6, 2) as Procnumber,[process_ID]
FROM [Hana].[dbo].[processActivityEvent] v
WHERE process_ID like 'AB18-07_shield%' 
我使用了一个子字符串来获取月份,该子字符串给出了:

结果

+------------+----------------------+
| Procnumber |      Process_ID      |
+------------+----------------------+
|         07 | AB18-07_shield123456 |
+------------+----------------------+
每当我们进入一个新的月份,也就是八月,我都会重复这个数字(月份)。我想要一个while循环或任何函数,可以将1添加到下一个数字或替换当前数字,这样我就不必在进入新的月份或年份时将其硬编码到查询中或修改查询。我想自动化这个过程。 请帮忙

WHERE process_ID like 'AB18-'+RIGHT('0' + RTRIM(MONTH(GETDATE())), 2)+'_shield%' 

您也可以对该年执行类似的操作

,并添加该年的计算结果

其中进程ID像'AB'+RIGHT(RTRIM(YEAR(GETDATE())),2) +“-”+右('0'+RTRIM(月(GETDATE())),2)+“U盾%”


非常感谢您及时回复用户1516044。我会试试的。再次谢谢你。真正的测试将在下个月进行,也就是4天后。您好,user1516044,这个公式非常有效,但问题是,数据库尚未填充,我的getdate无法工作,如果我添加一个if-else语句呢?有可能吗?我如何构造我的if语句以继续选择前一个月,并且当当前月份出现时,它应该选择该月?我不知道你是否会看到我的新评论,但如果你不回答,我会提出一个新问题。谢谢大家。你们是在存储过程中运行这个吗?我可能会的,如果你不是而且你可以的话。我将执行您想要的where子句并获得一个计数。将其分配给一个变量。如果@Count>0,则选择您的结果。否则选择上个月的结果<代码>代码声明@count int;从…中选择@count=count(进程ID)。。。其中进程ID类似于'AB'+右(RTRIM(YEAR(GETDATE())),2)+'-'+右('0'+RTRIM(MONTH(GETDATE())),2)+''u shield%';如果@count=0’,那么我们需要使用上月执行查询。要实现这一点,请将GETDATE()更改为DateAdd(-1,month,GETDATE())另一种方法实际上也在做同样的事情,即
code
如果存在(当前月查询),则开始运行相同的选择结束,否则开始运行上个月的选择,再次将GETDATE()替换为DateAdd(-1,month,GETDATE())结束谢谢,皮特非常感激。