在SQL-Server中关于日期的数据类型有哪些?
正在做项目,在数据库设计时,有一个字段,需要用到日期(只要年、月、日),用了Datetime和Smalldatetime都试过,但是我只需要日期,不要带时间,因此,我试用...
正在做项目,在数据库设计时,有一个字段,需要用到日期(只要年、月、日),用了Datetime和Smalldatetime都试过,但是我只需要日期,不要带时间,因此,我试用两种数据类型时借助check和default约束以及year、month、day函数,结果有的直接失败,有的是成功了,可惜,插入数据时却提示向datetime、smalldatetime类型转换时失败,该如何解决啊,哪位高手指点一下,定当感激涕零……
展开
4个回答
展开全部
有datetime和smalldatetime两种格式的日期时间数据类型,如下:
1、datetime
数据库内部用两个4字节的整数存储datetime数据类型的值。
第一个4字节存储基础日期(即1900-1-1, base date)之前或之后的日期。
日期范围为1753-1-1至9999-12-31。当日期为1900-1-1时值为0,之前的日期是负数;之后日期是正数,另外一个4字节存储以午夜后三又三分之一(10/3)毫秒数所代表的每天的时间。
2、smalldatetime
smalldatetime数据类型存储日期和每天的时间,但精确度低于datetime。
SQL Server将smalldatetime的值存储为两个2字节的整数。
第一个2字节存储1900-1-1后的天数,另外一个2字节存储午夜后的分钟数。
日期范围从1900-1-1到2079-6-6,时间精确到分钟,29.998秒或更低的smalldatetime值向下舍入为最接近的分钟,29.999秒或更高的smalldatetime值向上舍入为最接近的分钟。
--returns time as 12:35
SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
GO
--returns time as 12:36
SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
GO
注意:没有单独的日期或时间类型。
1、datetime
数据库内部用两个4字节的整数存储datetime数据类型的值。
第一个4字节存储基础日期(即1900-1-1, base date)之前或之后的日期。
日期范围为1753-1-1至9999-12-31。当日期为1900-1-1时值为0,之前的日期是负数;之后日期是正数,另外一个4字节存储以午夜后三又三分之一(10/3)毫秒数所代表的每天的时间。
2、smalldatetime
smalldatetime数据类型存储日期和每天的时间,但精确度低于datetime。
SQL Server将smalldatetime的值存储为两个2字节的整数。
第一个2字节存储1900-1-1后的天数,另外一个2字节存储午夜后的分钟数。
日期范围从1900-1-1到2079-6-6,时间精确到分钟,29.998秒或更低的smalldatetime值向下舍入为最接近的分钟,29.999秒或更高的smalldatetime值向上舍入为最接近的分钟。
--returns time as 12:35
SELECT CAST('2000-05-08 12:35:29.998' AS smalldatetime)
GO
--returns time as 12:36
SELECT CAST('2000-05-08 12:35:29.999' AS smalldatetime)
GO
注意:没有单独的日期或时间类型。
2013-09-10
展开全部
插入数据之前在代码中处理好年月日,插进去,读取时,再在代码中处理好只要年月日,这样可行不
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-10
展开全部
哥告诉你吧!如果只用年月日、只能像你想的那样儿、先建一个函数: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 在提取关键部位 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\') 20040912110608 最后你就代入函数就行了、 select CONVERT(varchar(12) , getdate(), 111 ) 2004/09/12
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-10
展开全部
可以用char类型进行代替啊如1990-04-12这样的可以用char(10) 来代替
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询