[原创]SQL表值函数:获取从当月计算起往前自定义月份数

 

今天我现在发现看一篇博文不能够太长,只要能够描述清楚自己想表达的东西,能够让大家知道你要讲什么就行了。因为我今天看了一些长篇博文,真的觉得知识点太多了, 会让人囫囵吞枣。

这篇博文跟我昨天发表的类似,同样是为了解决一个统计需求,结果是要求返回从当月起往回推算出自定义输入的月份

喜欢总结的我,为此写了一个表值函数来解决这一需求。现记录一下,也希望能帮助到一些也遇到此类问题的朋友。

首先我们看一下执行效果图:

返回最近一年即是十二个月的数据,执行调用函数:SELECT * FROM [Fn_RunMonth](-12)

具体函数如下:

-- =============================================
-- 调用:SELECT * FROM [Fn_RunMonth](-12)
-- Create date:2015-01-12
-- Description:    获取从当月计算起往前 @num 月,返回Table
-- =============================================
CREATE FUNCTION [dbo].[Fn_RunMonth] (@num INT=-12)
RETURNS @tab TABLE
    (
     Sale_Year VARCHAR(10) ,
     XSDate VARCHAR(10) ,
     Sort INT
    )
AS
    BEGIN

        DECLARE @i INT 
        SET @i=0
        WHILE (@i>@num)
            BEGIN
                INSERT  INTO @tab
                        SELECT  [Sale_Year] = YEAR(DATEADD(month, @i, GETDATE())) ,
                                [XSDate] = MONTH(DATEADD(month, @i, GETDATE())) ,
                                Sort = @i
                SET @[email protected]
            END
        RETURN
    END

如果朋友们觉得以后可能会用到的话,欢迎转载,当然也可以推荐一下,谢谢。

 

PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好。

时间: 2024-10-05 20:46:04

[原创]SQL表值函数:获取从当月计算起往前自定义月份数的相关文章

[原创]SQL表值函数:返回从当前周开始往回的自定义周数

一如往常一样,一篇简短博文记录开发过程中遇到的一个问题.初衷都是记录自己的一些Idea,也是希望能够帮助一些凑巧遇到此类需求的问题,这个需求的的开端是因为,要统计最近N周的销售数据. 接下来我们来看看执行函数的效果如下图: select  * from  [dbo].[Fn_RunWeek] (-12) 具体函数如下: -- ============================================= -- 调用: select  * from  [dbo].[Fn_RunWeek

[原创]SQL表值函数:把用逗号分隔的字符串转换成表格数据

  我们日常开发过程中,非常常见的一种需求,把某一个用逗号或者/或者其他符号作为间隔的字符串分隔成一张表数据. 在前面我们介绍了 [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式,当然按照这种方式转变一下也是可以实现的,但是我这里有以前我一直使用的另外一种方式,也记录一下吧. 依照惯例,我们首先来看看效果. 调用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',') 具体函数如下: -- ==========

SQL 表值函数操作

CREATE FUNCTION [dbo].[f_getpy_tb] ( @str VARCHAR(100) ) RETURNS @tb TABLE ( re VARCHAR(8000) ) AS BEGIN DECLARE @re TABLE ( id INT, re VARCHAR(8000) ) --数据处理中间表 DECLARE @i INT , @ilen INT , @splitchr VARCHAR(1) SELECT @splitchr = ' ' --两个拼音之间的分隔符(目的

PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5oz/2oz/3oz') 效果如下: SQL实现表值函数 CREATE FUNCTION [dbo].[splitStr]( @s varchar(max), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS @re TABLE(id int IDENTIT

SQL 表值函数

表值函数返回的是一张表. 情况:把传入的字符串按指定分隔符转换成数组 理解:把字符串打散,逐个插入表,这个表就是需要的数据 Create Function [dbo].[Split] ( @Sql varchar(8000), @Splits varchar(10) ) returns @temp Table (a varchar(100)) As Begin Declare @i Int Set @Sql = RTrim(LTrim(@Sql)) Set @i = CharIndex(@Spl

SQL表值函数和标量值函数的区别

写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型.举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回. ALTER FUNCTION testGetSubNodes ( @nodeId int

sql 表值函数与标量值函数

写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量值函数可以返回基类型. 举个例子,当用户删除一个节点的时候,是需要将当前节点下的所有子节点都删掉,如果程序只传一个当前节点,那就需要写一个函数来得到当前节点下的所有子节点,这些子节点的信息就可以放到一个表中返回. ALTER FUNCTION testGetSubNodes ( -- Add the

sql 表值函数-将一个传入的字符串用2中分隔符拆分成临时表

USE [tms]GO/****** Object: UserDefinedFunction [dbo].[fn_StrToTable_Double] Script Date: 2017/4/26 9:07:38 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: HXQ-- Create date: 2016年8月9日18:0

php计算几分钟前、几小时前、几天前的几个函数

函数方法: /*php计算几分钟前.几小时前.几天前的几个函数*/ function get_date($time){ $t=time()-$time; $f=array( '31536000'=>'年', '2592000'=>'个月', '604800'=>'星期', '86400'=>'天', '3600'=>'小时', '60'=>'分钟', '1'=>'秒' ); foreach ($f as $k=>$v) { if (0 !=$c=floor(