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
查看全文
相关阅读:
asp.net tutorial(http://www.cnblogs.com/mqingqing123/archive/2006/04/16/376358.html)
CSS五日教程 (reference to http://www.tuqiu.com/study/css/day1_1.php)
CSS教程 http://www.lnnu.edu.cn/dandu/hqcy/internet/jiaocheng/css/css.htm
关于Spoolsv.exe
理解MVC
Design Patterns(十五):Command PatternVB代码
Design Patterns(十六):Interpreter PatternVB代码
Design Patterns(十三):Proxy PatternVB代码
Design Patterns(二十):Observer PatternVB代码
【转】VB中动态编程的技巧和挑战:多重分派
原文地址:https://www.cnblogs.com/nosnowwolf/p/1135551.html
最新文章
Github Pages+Gridea搭建个人博客
Android Activity间跳转与传递数据
MySQL8开启SSL加密
OkHttp配置HTTPS访问+服务器部署
STL String的使用
STL List的使用
Delphi相关文件扩展名介绍
在Delphi 7调试过程中查看内存
C++中extern “C”含义深层探索
Delphi编译器指令说明
热门文章
STL Map的使用
__cdecl __fastcall与 __stdcall的区别
DELPHI中的程序流程的辅助控制
Delphi 嵌入汇编寄存器表
关于12 小时制的pm 与 am问题
JavaScript 参考教程
生成一个加密的email 地址
今天才发现And和AndAlso的区别
JavaScript 简介
JavaScript 参考
Copyright © 2011-2022 走看看