month和year的参数为整数,为何返回的不是1?
看书上说 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




