zoukankan
html css js c++ java
Sql Server 特殊日期加减函数
if
exists
(
select
*
from
dbo.sysobjects
where
id
=
object_id
(N
'
[dbo].[f_DateADD]
'
)
and
xtype
in
(N
'
FN
'
, N
'
IF
'
, N
'
TF
'
))
drop
function
[
dbo
]
.
[
f_DateADD
]
GO
/**/
/*
--特殊日期加减函数
对于日期指定部分的加减,使用DATEADD函数就可以轻松实现。
在实际的处理中,还有一种比较另类的日期加减处理
就是在指定的日期中,加上(或者减去)多个日期部分
比如将2005年3月11日,加上1年3个月11天2小时。
对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。
本函数实现这样格式的日期字符串加减处理:
y-m-d h:m:s.m | -y-m-d h:m:s.m
说明:
要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔
最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。
如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。
--
*/
/**/
/*
--调用示例
SELECT dbo.f_DateADD(GETDATE(),'11:10')
--
*/
CREATE
FUNCTION
dbo.f_DateADD(
@Date
datetime
,
@DateStr
varchar
(
23
)
)
RETURNS
datetime
AS
BEGIN
DECLARE
@bz
int
,
@s
varchar
(
12
),
@i
int
IF
@DateStr
IS
NULL
OR
@Date
IS
NULL
OR
(
CHARINDEX
(
'
.
'
,
@DateStr
)
>
0
AND
@DateStr
NOT
LIKE
'
%[:]%[:]%.%
'
)
RETURN
(
NULL
)
IF
@DateStr
=
''
RETURN
(
@Date
)
SELECT
@bz
=
CASE
WHEN
LEFT
(
@DateStr
,
1
)
=
'
-
'
THEN
-
1
ELSE
1
END
,
@DateStr
=
CASE
WHEN
LEFT
(
@Date
,
1
)
=
'
-
'
THEN
STUFF
(
RTRIM
(
LTRIM
(
@DateStr
)),
1
,
1
,
''
)
ELSE
RTRIM
(
LTRIM
(
@DateStr
))
END
IF
CHARINDEX
(
'
'
,
@DateStr
)
>
1
OR
CHARINDEX
(
'
-
'
,
@DateStr
)
>
1
OR
(
CHARINDEX
(
'
.
'
,
@DateStr
)
=
0
AND
CHARINDEX
(
'
:
'
,
@DateStr
)
=
0
)
BEGIN
SELECT
@i
=
CHARINDEX
(
'
'
,
@DateStr
+
'
'
)
,
@s
=
REVERSE
(
LEFT
(
@DateStr
,
@i
-
1
))
+
'
-
'
,
@DateStr
=
STUFF
(
@DateStr
,
1
,
@i
,
''
)
,
@i
=
0
WHILE
@s
>
''
and
@i
<
3
SELECT
@Date
=
CASE
@i
WHEN
0
THEN
DATEADD
(
Day
,
@bz
*
REVERSE
(
LEFT
(
@s
,
CHARINDEX
(
'
-
'
,
@s
)
-
1
)),
@Date
)
WHEN
1
THEN
DATEADD
(
Month
,
@bz
*
REVERSE
(
LEFT
(
@s
,
CHARINDEX
(
'
-
'
,
@s
)
-
1
)),
@Date
)
WHEN
2
THEN
DATEADD
(
Year
,
@bz
*
REVERSE
(
LEFT
(
@s
,
CHARINDEX
(
'
-
'
,
@s
)
-
1
)),
@Date
)
END
,
@s
=
STUFF
(
@s
,
1
,
CHARINDEX
(
'
-
'
,
@s
),
''
),
@i
=
@i
+
1
END
IF
@DateStr
>
''
BEGIN
IF
CHARINDEX
(
'
.
'
,
@DateStr
)
>
0
SELECT
@Date
=
DATEADD
(Millisecond
,
@bz
*
STUFF
(
@DateStr
,
1
,
CHARINDEX
(
'
.
'
,
@DateStr
),
''
),
@Date
),
@DateStr
=LEFT
(
@DateStr
,
CHARINDEX
(
'
.
'
,
@DateStr
)
-
1
)
+
'
:
'
,
@i
=
0
ELSE
SELECT
@DateStr
=
@DateStr
+
'
:
'
,
@i
=
0
WHILE
@DateStr
>
''
and
@i
<
3
SELECT
@Date
=
CASE
@i
WHEN
0
THEN
DATEADD
(Hour,
@bz
*LEFT
(
@DateStr
,
CHARINDEX
(
'
:
'
,
@DateStr
)
-
1
),
@Date
)
WHEN
1
THEN
DATEADD
(Minute,
@bz
*LEFT
(
@DateStr
,
CHARINDEX
(
'
:
'
,
@DateStr
)
-
1
),
@Date
)
WHEN
2
THEN
DATEADD
(Second,
@bz
*LEFT
(
@DateStr
,
CHARINDEX
(
'
:
'
,
@DateStr
)
-
1
),
@Date
)
END
,
@DateStr
=
STUFF
(
@DateStr
,
1
,
CHARINDEX
(
'
:
'
,
@DateStr
),
''
),
@i
=
@i
+
1
END
RETURN
(
@Date
)
END
GO
查看全文
相关阅读:
layer open用法
解决服务器连接错误Host ‘主机号’ is not allowed to connect to this MySQL server
java数据类型转换
Java数八大据类型的拓展
Java八大基本数据类型
JDK、JRE、JVM的基本介绍
Java特性和优势
Dos常用命令
四种cmd打开方式
Markdown学习
原文地址:https://www.cnblogs.com/nosnowwolf/p/1135551.html
最新文章
mysql的if 和 case when
mysql去重之实战总结
解决laravel查询构造器中的别名问题
Composer使用 —— 常用命令和版本约束
Laravel同时接收路由参数和查询字符串中的参数以及laravel 提交数据的时候总是带有一个参数 s 是什么原因
【JSONP技巧拓展】————2、JSONP 安全攻防技术
【JSONP技巧拓展】————1、JSONP注入解析
【WAF技巧拓展】————9、Bypass WAF Cookbook – MayIKissYou
【WAF技巧拓展】————8、我的WafBypass之道(Misc篇)
【WAF技巧拓展】————7、我的WafBypass之道(upload篇)
热门文章
【PHP渗透技巧拓展】————1、php 伪协议
【WAF技巧拓展】————6、我的WafBypass之道(SQL注入篇)
【WAF技巧拓展】————5、web应用防火墙逃逸技术(二)
【WAF技巧拓展】————4、web应用防火墙逃逸技术(一)
【WAF技巧拓展】————3、如何绕过过滤器和WAF规则实现PHP远程漏洞利用
java基础之方法,参数,返回值(四)
java基础之创建新的数据类型:类(三)
java基础之基本类型(二)
java基础之入门了解(一)
javaweb 测试数据库连接是否正常
Copyright © 2011-2022 走看看