当前位置:  数据库>sqlserver

数据库 日期加减处理

    来源: 互联网  发布时间:2014-09-05

    本文导语:  在实际的处理中,还有一种比较另类的日期加减处理,就是在指定的日期中,加上(或者减去)多个日期部分,比如将2005年3月11日,加上1年3个月11天2小时。对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。要实...

在实际的处理中,还有一种比较另类的日期加减处理,就是在指定的日期中,加上(或者减去)多个日期部分,比如将2005年3月11日,加上1年3个月11天2小时。对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。

要实现多个日期部分的加减处理,最主要的就是把要加减的日期字符分解,然后根据分解的结果在指定日期的对应日期部分加上相应的值,其难点在于如何分解日期字符,以及判断分解后的日期字符属于哪个日期部分。要顺利地分解出日期字符的话,首先要规定日期加减的日期字符的格式,可以这样定义:
y-m-d h:m:s.m | -y-m-d h:m:s.m
代码如下:

说明:要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔,最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。

确定了日期字符格式后,处理方法就可以这样确定:获取日期字符的第一个字符,判断处理方式,然后将要加减的日期字符按空格分拆为日期和时间两部分,对于日期部分从低位到高位逐个截取日期数据进行处理,对于时间从高位到低位逐个处理。
以下是实现日期的多个部分同时加减处理的用户定义函数代码:
代码如下:

CREATE FUNCTION 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''
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

    
 
 

您可能感兴趣的文章:

  • 如何将数据库中的日期型字段中的时间和日期同时取出来放到Date型变量中?
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 如何用JDBC来查询数据库中日期最近的一行数据
  • 请问Access数据库中的日期型字段是对应java中的哪个Date类?
  • 怎样往oracle数据库里存日期型数据?
  • 怎样通过表单将输入的日期取出,并保存到数据库中
  • 从jsp向数据库插入日期时间的方法
  • 怎样一次取得sqlserver数据库的日期和时间?
  • 请问如何将日期型的变量插入数据库中??
  • 怎么用INSERT语句把日期和时间查入数据库中?
  • 请问,去会字符串型的日期,如何转化成datetime型从而写入数据库?如果不转换,能写入吗?(多谢)?
  • 数据库中日期型字段,如何在 java 中分别获得其中的年月日
  • 关于在JBuilder7中向数据库中存如当前日期的问题,撒100分!!急!!
  • 在Java中,用Mircosoft SQL Server数据库,请问要进行日期字段的读取,用( ResultSet rs ; rs.getDate(1),其中1代表相应的字段为 DateTi
  • 如何将日期和时间同时存入数据库(在sql server用PreparedStatement)中?
  • sql数据库获取某月某季某年最后一天(sql日期计算)
  • 怎样将数据库中的数据导到C 的数组中?对其进行处理
  • MSSQL附加数据库拒绝访问提示5120错误的处理方法
  • SQL Server2008数据库导入导出兼容性处理方案
  • 紧需 一个isp 开发的 网站验证处理数据库程序 需要有安全机制的 !
  • 通过JDBC连接数据库,执行抄作后,关闭了连接,数据服务器端的进程还在,怎麽处理?
  • JSP 里面 怎么处理检体和繁体的问题,后台数据库是ACCESS,多谢,多谢!!!
  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • UNIX下面能否使用类似BCP的程序连接另一台UNIX下面的Sybase数据库进行数据处理
  • 烦人:用Java操纵mySQL数据库时的中文字符处理。
  • sql数据库批量处理脚本
  • oracle删除文件后数据库启动不了的处理方法
  • 我时用jdbc打开数据库,使用后是否要显示的关闭数据库,还是等java的垃圾回收器来处理。
  • jsp存入数据库中文字符变为乱码,怎么处理?谢先了!
  • Linux系统下导出ORACLE数据库出现Exporting questionable statistics.错误 处理
  • 还原sql server数据库的处理方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 如何监控数据库的数据,如果数据库数据更改,就通知Server
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • 散分:Jbuilder6开发数据库应用请问你们都用什么数据库? 免费的数据库有那些?
  • 文档数据库mongodb与列式数据库hbase详细比较
  • 如何从数据库中或文本文件中提取数据到另一个数据库中?
  • nosql数据库levedb介绍及levedb最新版1.18下载安装
  • 开发java下的数据库程序,用什么数据库引擎?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • sql 语句 取数据库服务器上所有数据库的名字
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 删除数据库中重复记录方法介绍及代码参考
  • 数据在页面写不进数据库,也不可以从数据库中读出是什么原因?
  • Mongodb数据库服务的开启与关闭详细介绍
  • sql语句获取数据库服务器上所有数据库的名字
  • ORACLE数据库常用字段数据类型介绍
  • 请问谁有Applet连接远程Access数据库并且显示数据库内容的例子!
  • 如何实现 coreos 下Docker 与分布式数据库结合
  • mssql无数据库日志文件恢复数据库的方法第1/2页




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3