[新手问题]关于在数据库的列中插入日期的问题. 请教大家我使用datatime型数据,但是插入日期后,用select 查询出来的总是:2010-12-09 00:00:00.000请教有什么方法可以不要后面的时间吗,只需要日期部分.只能使用convert函数吗.这样的话,比较麻烦,特别是我要查询列较多的整张表时.如果不去掉后面的时间,是不是输出到其他的软件里面也是这样2010-12-09 00:00:00.000的字符串? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 日期存进去就是精确到毫秒,除非用varchar 存放,插入时候用convert 转换 按你的需求,你应该用DATE类型DECLARE @D1 DATETIME,@D2 DATESELECT @D1=GETDATE(),@D2=GETDATE()SELECT @D1 AS [DATETIME],@D2 AS [DATE]/*DATETIME DATE----------------------- ----------2011-01-04 16:57:37.537 2011-01-04*/ 另外,数据库内存储的并不是你看到的格式,而是一个8位的16进制数,你看到的带000的格式只是客户端生成的。在程序里,用DATE类型接收时格式化一下也没问题。 你好,再请问一下,DATE,sql2005中没有这个类型啊. DATE类型是SQL SERVER 2008新加的类型:DATE你是否曾经想只存储日期而没有时间?如果是的话,使用旧的日期数据类型将无法完成。现在在SQL Server 2008中你可以使用DATE数据类型,DATE数据类型允许只存储一个日期值,它支持的日期范围从0001-01-01到9999-12-31,存储 DATE数据类型磁盘开销只需3个字节,如果你只需要存储日期值而没有时间,使用DATE可以比SMALLDATETIME节省一字节的磁盘空间。这里用一个示例来展示如何显示DATE的值SET NOCOUNT ON;DECLARE @D DATE = '2001-03-1';PRINT @D;SELECT CONVERT(char(10),@D,120) DATEONLY, @D [DATE-N-TIME];运行上述代码将会得到如下结果2001-03-01DATEONLY DATE-N-TIME---------- -----------------------2001-03-01 2001-03-01 00:00:00.000这里你可以看到PRINT语句显示日期使用YYYY-MM-DD格式,但是SELECT语句要求你使用CONVERT函数把DATE变量转换为YYYY- MM-DD格式,正如你所看到的,如果你使用SELECT只显示一个DATE变量,最后的输出结果仍然包含时间部分,这个功能在所有新的日期和时间数据类型中是一致的。 Datetime和SmallDatetime类型的内部存储 时间类型在存储时候被分成2日期和时间2独立部分. 日期部分存储的是和1900-01-01的天数差,时间部分存储,如果是Datetime,午夜0点后时钟周期数,一个时钟周期数为1/300秒,即3.33毫秒.如果是smalldatetime,时间部分存储的是午夜0点以后的分钟数. 我们只要将时间转换成16进制就可以很清楚的看到了。接下来演示一下:declare @day1 datetimeset @day1=current_timestamp --datetimeselect @day1,--2010-03-07 17:29:49.637CONVERT(varbinary(8),@day1),-- 0x00009D32012057FBCONVERT(int,SUBSTRING(CONVERT(varbinary(8),@day1),1,4)),--40242CONVERT(int,SUBSTRING(CONVERT(varbinary(8),@day1),5,4))--18876708*3.33/1000/60/60 =17.46 只能使用convert函数.select convert(varchar(10),dt,120) from tb有关convert的使用方法见下:不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输入/输出** - 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM) 1 101 美国 mm/dd/yyyy 2 102 ANSI yy.mm.dd 3 103 英国/法国 dd/mm/yy 4 104 德国 dd.mm.yy 5 105 意大利 dd-mm-yy 6 106 - dd mon yy 7 107 - mon dd, yy 8 108 - hh:mm:ss - 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 10 110 美国 mm-dd-yy 11 111 日本 yy/mm/dd 12 112 ISO yymmdd - 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 14 114 - hh:mi:ss:mmm(24h) - 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff] - 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff] - 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格) - 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM - 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM 系统视图问题! 菜鸟求一sql语句 问2个SQL语句 怎样来更新数据? 如何把323-726-1741转换为(323) 726-1741???? 请问怎样建立一个Job实现自动发送邮件?(在线等待!) insert 表 报 no row was produed SQL数据库容量的问题,把数据清空,数据库容量还是那么大,请大侠们帮忙解决。谢谢 求100内能被7整除的数和 声讨过时医药管理软件 SQL Server Management Studio 2008 Express 安装失败 sql高级查询
DECLARE @D1 DATETIME,@D2 DATE
SELECT @D1=GETDATE(),@D2=GETDATE()
SELECT @D1 AS [DATETIME],@D2 AS [DATE]
/*
DATETIME DATE
----------------------- ----------
2011-01-04 16:57:37.537 2011-01-04
*/
DATE你是否曾经想只存储日期而没有时间?如果是的话,使用旧的日期数据类型将无法完成。现在在SQL Server 2008中你可以使用DATE数据类型,DATE数据类型允许只存储一个日期值,它支持的日期范围从0001-01-01到9999-12-31,存储 DATE数据类型磁盘开销只需3个字节,如果你只需要存储日期值而没有时间,使用DATE可以比SMALLDATETIME节省一字节的磁盘空间。这里用一个示例来展示如何显示DATE的值SET NOCOUNT ON;
DECLARE @D DATE = '2001-03-1';
PRINT @D;
SELECT CONVERT(char(10),@D,120) DATEONLY, @D [DATE-N-TIME];运行上述代码将会得到如下结果2001-03-01
DATEONLY DATE-N-TIME
---------- -----------------------
2001-03-01 2001-03-01 00:00:00.000
这里你可以看到PRINT语句显示日期使用YYYY-MM-DD格式,但是SELECT语句要求你使用CONVERT函数把DATE变量转换为YYYY- MM-DD格式,正如你所看到的,如果你使用SELECT只显示一个DATE变量,最后的输出结果仍然包含时间部分,这个功能在所有新的日期和时间数据类型中是一致的。
set @day1=current_timestamp
--datetime
select @day1,--2010-03-07 17:29:49.637
CONVERT(varbinary(8),@day1),-- 0x00009D32012057FB
CONVERT(int,SUBSTRING(CONVERT(varbinary(8),@day1),1,4)),--40242
CONVERT(int,SUBSTRING(CONVERT(varbinary(8),@day1),5,4))--18876708*3.33/1000/60/60 =17.46
不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**
- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM