评论

收藏

[Sybase] sybase日期函数

数据库 数据库 发布于:2021-07-01 10:41 | 阅读数:291 | 评论:0

  

  Sybase日期函数
  日期函数
  getdate()
  得到当前时间,可以设置得到各种时间格式.
  datepart(日期部分,日期)
  取指定时间的某一个部分,年月天时分秒.
  datediff(日期部分,日期1,日期2)
  计算指定的日期1和日期2的时间差多少.
  dateadd(日期部分,数值表达式,日期)
  计算指定时间,再加上表达式指定的时间长度.
  

  --取时间的某一个部分
  

  select datepart(yy,getdate()) --year
  select datepart(mm,getdate()) --month
  select datepart(dd,getdate()) --day
  select datepart(hh,getdate()) --hour
  select datepart(mi,getdate()) --min
  select datepart(ss,getdate()) --sec
  --取星期几
  //该计算出的结果要+1,因其计算出的星期天为一周的第1天,星期六自然就成为一周第7天
  set datefirst 1
  select datepart(weekday,getdate()) --weekday
  

  --字符串时间
  select getdate() -- '03/11/12'
  select convert(char,getdate(),101) -- '09/27/2003'
  select convert(char,getdate(),102) -- '2003.11.12'
  select convert(char,getdate(),103) -- '27/09/2003'
  select convert(char,getdate(),104) -- '27.09.2003'
  select convert(char,getdate(),105) -- '27-09-2003'
  select convert(char,getdate(),106) -- '27 Sep 2003'
  select convert(char,getdate(),107) --'Sep 27, 2003'
  select convert(char,getdate(),108) --'11:16:06'
  select convert(char,getdate(),109) --'Sep 27 2003 11:16:28:746AM'
  select convert(char,getdate(),110) --'09-27-2003'
  select convert(char,getdate(),111) --'2003/09/27'
  select convert(char,getdate(),112) --'20030927'
  select rtrim(convert(char,getdate(),102))+' '+(convert(char,getdate(),108)) -- '2003.11.12 11:03:41'
  

  

  --整数时间
  select convert(int,convert(char(10),getdate(),112)) -- 20031112
  select datepart(hh,getdate())*10000 + datepart(mi,getdate())*100 + datepart(ss,getdate()) -- 110646
  

  --时间格式 "YYYY.MM.DD HH:MI:SS" 转换为 "YYYYMMDDHHMISS"
  

  declare @a datetime,@tmp varchar(20),@tmp1 varchar(20)
  select @a=convert(datetime,'2004.08.03 12:12:12')
  select @tmp=convert(char(10),@a,112)
  select @tmp
  select @tmp1=convert(char(10),datepart(hh,@a)*10000 + datepart(mi,@a)*100 + datepart(ss,@a))
  select @tmp1
  select @tmp=@tmp+@tmp1
  select @tmp
  

  --当月最后一天
  

  declare
  @tmpstr varchar(10)
  @mm int,
  @premm int,
  @curmmlastday varchar(10)
  begin
  select @mm=datepart(month,getdate())--当月
  select @premm=datepart(month,dateadd(month,-1,getdate())) --上个月
  if (@mm>=1 and @mm<=8)
  select @tmpstr=convert(char(4),datepart(year,getdate()))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
  else if (@mm>=9 and @mm<=11)
  select @tmpstr=convert(char(4),datepart(year,getdate()))+'.'+convert(char(2),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
  else
  select @tmpstr=convert(char(4),datepart(year,dateadd(year,1,getdate())))+'.0'+convert(char(1),datepart(month,dateadd(month,1,getdate())))+'.'+'01'
  select @curmmlastday=convert(char(10),dateadd(day,-1,@tmpstr),102) --当月最后一天
  end
  ----------------------------------------------------------
  格式为:DateAdd(interval, number, date)
  interval:间隔时间(如时、分、秒、天、周、月、季、年)
  number:间隔数(正数为向后+N,负数为向前-N)
  date:当前日期或指定日期
  查询当前日期起,以时、分、秒、天、周、月、季、年为间隔的日期
  时:select convert(char(8),dateadd(hour,1,getdate()),112)
  分:select convert(char(8),dateadd(minute,1,getdate()),112)
  秒:select convert(char(8),dateadd(second,1,getdate()),112)
  天:select convert(char(8),dateadd(day,1,getdate()),112)
  周:select convert(char(8),dateadd(week,1,getdate()),112)
  月:select convert(char(8),dateadd(month,1,getdate()),112)
  季:select convert(char(8),dateadd(quarter,1,getdate()),112)
  年:select convert(char(8),dateadd(year,1,getdate()),112)
  -----------------------------------------------------------
  select dateadd(year, 1, '31-Jan-96')
  select dateadd( month, 1, '1987/05/02' )
  select datediff(day,'2008-10-1','2008-10-31')
  -----------------------------------------------------------
  上月第一天:
  select dateadd(mm,-1,convert(char(8),(datepart(yy,getdate())*10000+datepart(mm,getdate())*100+01)))
  上月最后一天:
  select dateadd(dd,-1,convert(char(8),(datepart(yy,getdate())*10000+datepart(mm,getdate())*100+01)))
  其实就是先取本月第一天,然后分别减一个月和一天就是上月第一天和最后一天
  

  --取本周第一天,以星期一作为本周第一天
  SELECT @WeekDate = DateAdd(day,1-(Case datepart(dw,Getdate())-1 when 0 then 7 else datepart(dw,GetDate())-1 end),GetDate())
  SELECT @WeekDate = Convert(varchar,@WeekDate,112)
  得到当前日期的本周最后一天
  SELECT @Date1 = DateAdd(day,7-(Case datepart(dw,@Date1)-1 when 0 then 7 else datepart(dw,@Date1)-1 end),@Date1)
  根据小时判断日结日期,HH>21时,返回当天日期,<21时,返回前一天日期
  select case when  datepart(hh,getdate()) >21 then convert(varchar,dateadd(dd,0,convert(datetime,getdate())),112) else convert(varchar,dateadd(dd,-1,convert(datetime,getdate())),112) end
  

  

  1.
  nullif(value1,value2)
  解释: case when value1=value2 then null
  else value1
  end
  例: select nullif(2,2)
  返回值: null
  select nullif(1,2)
  返回值: 1
  注意:value1何value2的数据类型必须兼容
  isnull(value1,value2)
  case when value1=null then value2 else value1 end
  例:select isnull(null,0)=0
  select isnull(2,0)=2
  

  2.关于日期的函数
  dateadd(dd,n,dDate)
  解释:返回dDate后n的日期 (n可以为负数)
  例: select dateadd(dd,2,'2006-12-10')--10号的后2天
  返回值:Dec 12 2006 12:00AM
  select dateadd(dd,-1,'2006-12-15')=Dec 14 2006 12:00AM
  datediff(day,date1,date2),
  解释:date2与date1相差的天数,若date2在前,则返回值为负数
  例子  select datediff(day,'2006-12-10','2006-11-30')=-10
  getdate() 返回服务器的当时时间
  datename(datepart,date) 返回时间的名称 例如     select datename(dy,'2006-2-01')=32/**dy,dayofyear,1-366**/
  round(number,n),四舍五入   例如 select round(123.155,2)=123.56
  datepart(day,date) 返回当月第一日的差距天数
  例如 datepart(day,'2006-12-15')返回15
  datepart(mm,'2006-12-15')返回12
  datepart(yy,'2006-12-15')返回2006
  convert(varchar,datepart(year,@Date1))+'01'+'01'  --取今年第一天
  DateAdd(day,-(datepart(day,@Date1)-1),@Date1)  --取当月的第一天
  dateadd(day,-1,DateAdd(day, -(datepart(day,dateadd(mm,1,@Date1))-1),dateadd(mm,1,@Date1)))  --取当月的最后一天
  dateadd(yy,-1,DateAdd(day,-(datepart(day,@Date1)-1),@Date1)) --取去年当月第一天
  dateadd(day,-1,DateAdd(day, -(datepart(day,dateadd(yy,-1,dateadd(mm,1,@Date1)))-1),dateadd(yy,-1,dateadd(mm,1,@Date1))))--取去年当月的最后一天
  datename()函数同等于datepart
  3.数学函数
  abs()返回当前数字的绝对值  例如 select abs(-2)=2
  avg() 返回某列的平均值
  ceiling   返回大于或等于知道值的最小整数 /**ceiling,n.天花板, 最**/2
  例如  select ceiling(9.1)=10  select ceiling(-9.1)
  count(all|distinct|expression) 计算行数
  4.字符串函数
  Itrim()
  rtrim()返回删去尾随空白的指定表达式
  select left('15425',2)='15'
  select right('123456',2)='56'
  substring('string',n,m)
  返回字符串从第n个起长度为m的字符串
  例如substring('iloveyou',2,4) 返回'love'
  char_length('?????') 返回字符串的长度值, 例如 char_length('我爱你') 返回6. 中文字符一个占2个字节
  char() 返回整数等值字符.
  count()
  REPLICATE
  以指定的次数重复字符表达式。
  语法    REPLICATE   (   character_expression   ,   integer_expression   ) ,表达式2 只能是数字或者能转化为数字的字符串
  例:select Replicate('0','3') 返回 000  , select Replicate('0','-3')  返回null,
  


  
关注下面的标签,发现更多相似文章