CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

month和year的参数为整数,为何返回的不是1?

楼主nozapig(糖果)2005-05-13 22:50:06 在 MS-SQL Server / 基础类 提问

看书上说   month()和year()的参数为整数的时候  
  返回值始终是1和1900  
  系统认为始终是1900年1月1日  
   
  但是为什么我输入的  
  select   month(33),yeat(366)  
   
  结果是  
                                                   
  -----------   -----------    
  2                       1901  
   
  (所影响的行数为   1   行)  
   
  希望大家帮忙解答  
  问题点数:50、回复次数:8Top

1 楼fancyf(凡瑞)回复于 2005-05-13 22:52:20 得分 10

select   month('2005-5-1'),year('2005-4-1')Top

2 楼paoluo(一天到晚游泳的鱼)回复于 2005-05-13 23:10:24 得分 10

楼主,执行这个语句看下  
  Select   Cast(33   As   DateTime),Cast   (366   As   DateTime)  
   
  你就会明白  
  select   month(33),year(366)  
  等同于  
  select   month('1900-02-03   00:00:00.000'),year('1901-01-02   00:00:00.000')  
  Top

3 楼bxyqt(碧血银枪)回复于 2005-05-13 23:42:55 得分 10

你也不必转换,我告诉你计算方法。   你将提到的33及366等数字看作天数,你用的month()、year()函数就是在1900年1月1日起,这么多天后,分别是几月,或者几年。Top

4 楼nozapig(糖果)回复于 2005-05-13 23:54:22 得分 0

我看到了,  
  month将其自动转换为了datetime  
  那么什么情况下他不转换那?  
   
  也就是说它在什么情况下是显示的1和1900呢?Top

5 楼nozapig(糖果)回复于 2005-05-13 23:57:41 得分 0

可是  
  帮助中写的是  
  month(),year()和day()的区别之一就是month()和year()对整型的诠释与day()不同  
  day()是累加  
  month(),year()是忽略,直接认为是1900.1.1Top

6 楼paoluo(一天到晚游泳的鱼)回复于 2005-05-14 00:19:32 得分 10

month(33),year(366),就是在1900年1月1日基础上加上32天和加上366天。  
   
  想得到1和1900,  
  month中的数字必须大于等于0,小于等于30,  
  year中的数字必须大于等于0,小于等于364。  
   
  select   month(0),year(0)  
  select   month(30),year(364)  
  就可以得到  
  1和1900Top

7 楼Hopewell_Go(好的在后頭﹗希望更好﹗﹗)回复于 2005-05-14 08:38:46 得分 10

select   month(33),yeat(366)  
   
  结果是  
                                                   
  -----------   -----------    
  2                       1901  
   
  因為一個月最多有31天吧  
  month(33)系統默認就從1月開始的。超過當1月的天數就會加1,所以顯示的就2  
   
  一年有365天但有的時候不就,系統默認的就從1900年開始。  
  超過了1900的天數就會加1.所以1901Top

8 楼nozapig(糖果)回复于 2005-05-15 16:43:30 得分 0

那岂不是说明中的解说根本就没有意义  
  还是和day一样Top

相关问题

  • 做控制台程序,如何把命令行参数转换为整数?
  • 存储过程输入参数中 @MoneyNum decimal 为什么总被截取到整数呢?
  • QueryPerfermanceCount中的参数是个有符号64位整数,那么它的是否会有负值返回?
  • 为什么我的过程参数 只能熟人整数时正确,熟人字符串就出错啊。
  • 整数,焦点?
  • 参数
  • 参数
  • 用createProcess或shellExecute创建一个新进程时传递命令行参数是lpstr型,我试了一个字串和整数的混合结构,结果不对,应该如何处理?
  • 如何取整数
  • 获得参数

关键词

  • 转换
  • 数字
  • 1900年1月1日
  • month
  • year
  • datetime
  • day
  • 就是
  • select

得分解答快速导航

  • 帖主:nozapig
  • fancyf
  • paoluo
  • bxyqt
  • paoluo
  • Hopewell_Go

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo