日期:2014-05-18  浏览次数:20686 次

日期函数的疑问
SQL code
    select @fromDate=convert(datetime,@period+'-01',120)  
    select @toDate=convert(datetime,@period+'-15 23:59:59',120)  
  end  
  else if (@f1=2)  
  begin  
    select @fromDate=convert(datetime,@period+'-01 23:59:59',120)  
    select @toDate=dateadd(month,1,@fromDate)  
    select @toDate=dateadd(day,-1,@toDate)  
    select @fromDate=convert(datetime,@period+'-16',120)  


-------------------------------
日期函数不会用用 看的就昏
能帮我解释一下上面代码含义吗

------解决方案--------------------
SQL code
都是赋值语句啊

 select @fromDate=convert(datetime,@period+'-01',120)  
    select @toDate=convert(datetime,@period+'-15 23:59:59',120) 

这两个是先组成成一个日期字符串 然后在用convert 转换成日期类型

   select @toDate=dateadd(month,1,@fromDate)  

DATEADD (datepart , number , date )
将指定 number 时间间隔(有符号整数)与指定 date 的指定 datepart 相加后,返回该 date




参数
datepart 
是与 integer number 相加的 date 部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。

datepart  缩写  
year 
 yy, yyyy
 
quarter 
 qq, q
 
month 
 mm, m
 
dayofyear 
 dy, y
 
day 
 dd, d
 
week 
 wk, ww
 
weekday 
 dw, w
 
hour 
 hh 
 
minute 
 mi, n
 
second 
 ss, s
 
millisecond 
 ms 
 
microsecond 
 mcs 
 
nanosecond 
 ns 
 

number 
是一个表达式,可以解析为与 date 的 datepart 相加的 int。用户定义的变量是有效的。

如果您指定一个带小数的值,则将小数截去且不进行舍入。

date 
是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。如果表达式是字符串文字,则它必须解析为一个 datetime 值。为避免不确定性,请使用四位数年份。有关两位数年份的信息,请参阅 two digit year cutoff 选项。

返回类型
返回数据类型为 date 参数的数据类型,字符串文字除外。

字符串文字的返回数据类型为 datetime。如果字符串文字的秒数小数位数超过三位 (.nnn) 或包含时区偏移量部分,将引发错误。

返回值
datepart 参数
dayofyear、day 和 weekday 返回相同的值。

每个 datepart 及其缩写都返回相同的值。

如果 datepart 为 month 且 date 月份比返回月份的天数多,因而 date 中的日在返回月份中不存在,则返回返回月份的最后一天。例如,9 月份有 30 天;因此,下面两个语句返回 2006-09-30 00:00:00.000:

SELECT DATEADD(month, 1, '2006-08-30') 

SELECT DATEADD(month, 1, '2006-08-31') 

number 参数
number 参数不能超出 int 的范围。在下面的语句中,number 的参数超出 int 范围 1。将返回如下错误消息:“将表达式转换为数据类型 int 时出现算术溢出错误。”

 复制代码 
SELECT DATEADD(year,2147483648, '2006-07-31');
SELECT DATEADD(year,-2147483649, '2006-07-31');
 

date 参数
date 参数不能增加至其数据范围之外的值。在下面的语句中,与 date 值相加的 number 值超出了 date 数据类型的范围。将返回如下错误消息:“将值添加到 'datetime' 列导致溢出。”

 复制代码 
SELECT DATEADD(year,2147483647, '2006-07-31');
SELECT DATEADD(year,-2147483647, '2006-07-31');

------解决方案--------------------
SQL code

/*相关日期函数用法*/
select datediff(day,'2011-09-1','2011-09-11')/*--返回两个日期之间的跨度天数 返回值:10 -- */

select getdate()                             /*--返回系统当前的时间 返回值:系统当前时间 -- */

select dateadd(day,2,'2011-09-01')/*--返回指定日期加上指定天数后的时间 返回值:2011-09-03 00:00:00.000--*/

select datepart(year, '2011-09-01')/*--返回指定日期指定部分 返回值:2011--*/

select datename(weekday, '2011-09-24') /*--weekday=dw--返回当前指定日期是礼拜几 返回:星期六--*/

select datename(week,'2011-09-24') /*--week=ww或wk --返回指定日期当天是本年度第多少周  返回:39 --*/

select convert(varchar(100),getdate(),120)  /*返回指定格式的当前系统日期和时间 返回值:2011-09-24 09:41:58*/


/*代码解释*/
--类似
select @fromDate=convert(datetime,@period+'-01',120) 
--是赋值语句 convert 将@period+'-01'转化为上面日期函数的相应显示类型
else if (@f1=2)
--这一句是if语句,当@f1=2
select @fromDate=convert(datetime,@period+'-01 23:59:59',120)
重新给@fromDate赋值

------解决方案--------------------
SQL code
 select @fromDate=convert(datetime,@period+'-01',120) --字符转为日期时间 
    select @toDate=convert(datetime,@period+'-15 23:59:59',120) --字符转为日期时间 
  end  
  else if (@f1=2)  
  begin  
    select @fromDate=convert(datetime,@period+'-01 23:59:59',120)  --字符转为日期时间
    select @toDate=dateadd(month,1,@fromDate) --日期加1个月 
    select @toDate=dateadd(day,-1,@toDate)  --日期减1天
    select @fromDate=convert(datetime,@period+'-16',120) --字符转为日期时间