SQL公用方法-根据日期格式字符串返回年季度开始和结束日期
来源:互联网 发布:淘宝打单怎么打 编辑:程序博客网 时间:2024/06/05 09:29
以下是我本人写的,可能繁杂代码比较多,大家将就看吧。我们一起提高:
IF EXISTS ( SELECT 1 FROM sys.objects o WHERE object_id = object_id( N'[FC1GetStimeEtimeByQQ]' ) AND OBJECTPROPERTY( object_id, N'IsFuntion') = 1 )
DROP function [FC1GetStimeEtimeByQQ]
GO
alter function FC1GetStimeEtimeByQQ
(
@syear nvarchar(5)
,@eyear nvarchar(5)
,@sqq nvarchar(2)
,@eqq nvarchar(1)
)
/*
功能:由季转换成该季度的开始日期结束日期
参数:
返回:开始和结束日期
编写:ljr
测试:
修改说明:
*/
returns @tb table( stime datetime,etime datetime)
as
begin
declare @stime datetime
declare @etime datetime
set @stime = DATEADD(qq, DATEDIFF(qq,0,@syear+'-01-01'), 0)
set @etime = CASE WHEN @eqq=1 THEN DATEADD(D,-1,@eyear+'-04-01 23:59:59.997')
WHEN @eqq=2 THEN DATEADD(D,-1,@eyear+'-07-01 23:59:59.997')
WHEN @eqq=3 THEN DATEADD(D,-1,@eyear+'-10-01 23:59:59.997')
WHEN @eqq=4 THEN DATEADD(D,-1,(cast (@eyear as int)+1)+'-01-01 23:59:59.997')
END
insert @tb select @stime ,@etime
return
end
go
以下是公司大神写的,果然比我写的好很多,而且考虑的也比较全面。看来还需要认真学习啊。特别是大神的思维方式:
ALTER FUNCTION [dbo].[F0_GetDateTimeByString]
(
@Type INT, --0:年 1:季 2:月
@Str VARCHAR(6), --字符串
@IsEndDate BIT=0 --是否结束日期 0:开始日期 1:结束日期
)
/*
功能:根据传入的字符串返回日期
*/
RETURNS DATETIME
AS
BEGIN
DECLARE @DT DATETIME, @Month VARCHAR(2)
IF @Type=0 --年度
BEGIN
IF @IsEndDate=1
SET @DT=CAST(LEFT(@Str, 4)+'-12-31' AS DATETIME)
ELSE
SET @DT=CAST(LEFT(@Str, 4)+'-01-01' AS DATETIME)
END ELSE
IF @Type=1 --季度
BEGIN
IF @IsEndDate=1
BEGIN
SET @Month=RIGHT(CAST(100+CAST(RIGHT(@Str, 1) AS INT)*3 AS VARCHAR), 2)
SET @DT=CAST(LEFT(@Str, 4)+'-'+@Month+'-'+'01' AS DATETIME)
END ELSE
BEGIN
SET @Month=RIGHT(CAST(100+CAST(RIGHT(@Str, 1) AS INT)*3-3+1 AS VARCHAR), 2)
SET @DT=CAST(LEFT(@Str, 4)+'-'+@Month+'-'+'01' AS DATETIME)
END
END ELSE
IF @Type=2 --月度
BEGIN
IF @IsEndDate=1
BEGIN
SET @Month=RIGHT(CAST(100+CAST(RIGHT(@Str, LEN(@Str)-4) AS INT) AS VARCHAR), 2)
SET @DT=CAST(LEFT(@Str, 4)+'-'+@Month+'-'+'01' AS DATETIME)
END ELSE
BEGIN
SET @Month=RIGHT(CAST(100+CAST(RIGHT(@Str, LEN(@Str)-4) AS INT) AS VARCHAR), 2)
SET @DT=CAST(LEFT(@Str, 4)+'-'+@Month+'-'+'01' AS DATETIME)
END
END
IF @IsEndDate=1
SET @DT = DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, @DT)+1, 0))
RETURN @DT
END
- SQL公用方法-根据日期格式字符串返回年季度开始和结束日期
- 根据开始日期和结束日期获取所有日期的方法
- 根据开始日期和结束日期=算了多少天
- php根据开始日期和结束日期得到时间数组
- IOS 根据日期,获取该日期所在周,月,年的开始日期,结束日期 的方法
- IOS 根据日期,获取该日期所在周,月,年的开始日期,结束日期 的方法
- 给定日期和日期类型(年、月、周、日)返回对应日期类型的开始时间和结束时间
- js根据日期获取本周的开始日期和结束日期
- js根据开始日期和结束日期得到中间的所有日期
- udf--根据开始日期和结束日期获取日期范围数组
- 根据【开始】【结束日期】查询数据库数据
- PHP 取出本月,本季度,本年,上月,上季度,上一年的开始和结束日期
- SQL : 开始日期和结束日期,SQL找出中间的所有日期. 关于天数。
- 根据指定日期获取周,月,年的开始和结束时间
- 根据今天的日期或者传入的日期得到本日所在周的开始日期和结束日期
- java方法,返回两个日期内的所有date集合,根据开始时间、结束时间得到两个时间段内所有的日期
- java 根据开始和结束日期得到之间所有日期集合
- java 根据开始和结束日期得到之间所有日期集合
- JSONP
- String之常量池小结
- WinCE音频驱动
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- javascript知识点(1)
- SQL公用方法-根据日期格式字符串返回年季度开始和结束日期
- Best Time to Buy and Sell Stock IV
- 全面分析 Spring 的编程式事务管理及声明式事务管理
- 使用apache作为文件服务器(仅提供文件下载,不提供路径)
- C++的输入输出
- composer 报 zlib_decode(): data error
- Qt 计算两个日前间隔天数
- 安卓 绑定service的aidl出现异常的解决
- Java:类与继承