有时想按日或月生成一个序列,就像2014-1-1、2014-1-2、2014-1-3...

在sql server中可以写个函数来实现。

/*
生成一个日期范围,如2014.01、2014.02...
@Increment 步进值
@StartDate 开始日期
@EndDate   结束日期
----------------------
@SelectedRange 返回值名称(多语句表值函数的返回值必须存放在返回值变量中)返回表的字段和类型:iDate DATETIME,iYear char(4),iMonth char(2),iYM CHAR(7)
*/CREATE FUNCTION [dbo].[DateRange]
(@Increment char(1) = 'm',@StartDate    DATE='20140101',@EndDate    DATE=null
)RETURNS @SelectedRange TABLE
(iDate DATE,iYear char(4),iMonth char(2),iYM CHAR(7)
)
AS
BEGIN
/*Default value for stored procedures parameter have to be constants.
The function GETDATE() returns a different value from time to time, so it is not a constant expression.
*/
--IF @EndDate is null
--SET @EndDate = getdate()
--or
SET @EndDate=Coalesce(@EndDate,GetDate());WITH cteRange(DateRange) AS(SELECT CAST(@StartDate AS DATE)UNION ALLSELECT CASEWHEN @Increment = 'd' THEN DATEADD(dd, 1, DateRange)WHEN @Increment = 'w' THEN DATEADD(ww, 1, DateRange)WHEN @Increment = 'm' THEN DATEADD(mm, 1, DateRange)ENDFROM cteRangeWHERE DateRange <= CASEWHEN @Increment = 'd' THEN DATEADD(dd, -1, @EndDate)WHEN @Increment = 'w' THEN DATEADD(ww, -1, @EndDate)WHEN @Increment = 'm' THEN DATEADD(mm, -1, @EndDate)END)INSERT INTO @SelectedRange(iDate,iYear,iMonth,iYM)SELECT DateRange, YEAR(DateRange) [Year], MONTH(DateRange) [Month] ,CONVERT(VARCHAR(7),DateRange,102)[YM]FROM cteRangeOPTION (MAXRECURSION 0);RETURN
END

这个函数的3个参数都设置了默认值,那么在调用的时候怎么用呢?

SELECT * FROM DateRange()

这样不写实参是不行的,如果都要用默认值,那么要写default:

SELECT * FROM DateRange(default,default,default)

如果有参数要传入:

SELECT * FROM DateRange('d','2014/1/1','2014/12/1')

这样就会显示1月1日到12月1日每天的数据:

注意在函数的参数中想写getdate()函数是不行的,因为参数要用常量,而getdate函数是个变量,所以要变通一下。

--End--

转载于:https://www.cnblogs.com/ibgo/p/4106484.html

SQL 生成一个日期范围相关推荐

  1. 一个sql生成hive日期维度表

    目录 1.日期维度表 2.生成语句 3.用例 在进行日期处理时,有时候会很麻烦,于是小编开发了一张日期维表,供大家参考. 1.日期维度表 num 字段名 字段中文名 描述 数据类型 1 date 日期 ...

  2. python随机生成一个日期_Python中随机生成未来一个月内的一个随机的日期时间

    该函数可以产生从当前日期时间开始到未来一个月内的一个固定时间 import random import timeit import time import datetime #该函数随机生成未来一个月 ...

  3. SQL生成整年日期表(全)

    背景:折线图生成全年时间数据 Oracle版本:  insert into year_oracle select to_date('20220101','yyyymmdd')+rownum-1 fro ...

  4. sql server 按照日期自动生成单据编号的函数

    一.sql server 按照日期自动生成单据编号的函数,格式为##08080001,##表示打头的单据字符,然后是年月和流水编号. 二.传入的参数为单据的打头字符和生成单据的日期 三.一般的调用格式 ...

  5. 【sql查询】使用sql查询一个物品是否在有效期内的方法(数据库无这个字段 通过生产日期和保质期进行计算得出)

    sql有效期查询 和筛选的方式 事件起因 问题描述: sql给后端提供数据 实际应用场景 针对上述sql缺点进行的一点改进 事件起因 今天在写一个查询一个产品的使用期限的时候遇到这个问题,物品的使用期 ...

  6. 在SqlServer中把多个job生成一个sql脚本

    在SqlServer中把多个job生成一个sql脚本 打开sqlserver,找到"查看",选择"对象资源管理器详细信息",双击sqlserver agent, ...

  7. oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...

    sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...

  8. java selectcommand_“对于不返回任何基表信息的 SelectCommand 不支持动态SQL生成”-奇怪的错误,不知道原因! | 学步园...

    OleDbCommandBuilder更新Access数据库中遇到的问题 部分代码如下: //AccountQuery.aspx.cs protected void FormView1_ItemUpd ...

  9. Sql养成一个好习惯是一笔财富

    Sql养成一个好习惯是一笔财富 我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段 ...

  10. SQL 养成一个好习惯是一笔财富

    来源:MR_ke 链接:http://www.cnblogs.com/MR_ke/archive/2011/05/29/2062085.html 我们做软件开发的,大部分人都离不开跟数据库打交道,特别 ...

最新文章

  1. 有没有搞错?Java 对象不使用时,要赋值为 null?
  2. JDK1.7安装配置环境变量+图文说明Jmeter安装
  3. 关于Java空指针的控制(转)
  4. catv系统主要有哪三部分组成_光纤放大器在DWDM传输系统中的应用
  5. 用python语言模拟微信红包_python 模拟微信抢红包 基础语法实现demo
  6. 新手入门HTML5开发,你必须先搞懂这6个问题
  7. Kubernetes之RBAC
  8. 三角网导线平差实例_三角网间接平差示例
  9. 运用spss modeler运用支持向量机_一道向量题一题多解引起的思考
  10. c4d如何把文字贴在物体表面_C4D立体贴地面字基础知识点
  11. PACS系统源码 影像管理系统源码(PACS)
  12. 怎么把qlv格式转换成mp4?快速转换qlv格式的方法
  13. JavaScript 数据类型和类型转换
  14. 利益交错-HTML5视频标准之争
  15. 算法工程师的核心竞争力是什么?
  16. SM3算法预处理和非预处理的调用(0018规范接口)
  17. inventor铸件图_inventor三维剖视图
  18. nrf52840 IO操作 定时器 LOG
  19. 基于asp.net执勤综合管理系统的设计与实现
  20. 基于matlab Simulink的双闭环三相和五相永磁同步电机仿真模型

热门文章

  1. VO、DTO、POJO、PO的区别
  2. js基础---字符串方法
  3. 数据比较1.0(文本格式)
  4. SSL For Free 免费 SSL 凭证申请 Let’s Encrypt
  5. 11月3日 迅雷白金会员vip账号分享 91freevip 23:00更新
  6. Codeforces Round #147 (Div. 2) E. Build String 最小费用最大流
  7. Visual Studio Code配置
  8. Log4Net 之走进Log4Net (四)
  9. js数据结构与算法--单链表的实现与应用思考
  10. 在Windows下启动java服务