首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

varchar和datetime互转为隐性,还有必要使用Cast和Convert么,该怎么处理

2012-04-24 
varchar和datetime互转为隐性,还有必要使用Cast和Convert么varchar和datetime互相转换为隐性转换,还有必要

varchar和datetime互转为隐性,还有必要使用Cast和Convert么
varchar和datetime互相转换为隐性转换,还有必要使用Cast和Convert么?

SQL code
Declare @dt_date datetime, @ch_date varchar(21), @dt_time datetime, @ch_time varchar(8)set @dt_date = '20100316 01:00:00.002'    --@ch_date=20100316 01:00:00.003set @ch_date = @dt_date            --[help文档cast项里:注明datetime->varchar是隐性转换]select @dt_dateset @dt_time = '01:00:00'        --@ch_time=1900-01-01 01:00:00.000set @ch_time = @dt_timeselect @dt_time/*set @ch_date = '20100316 01:00:00.005'    --@dt_date=2010-03-16 01:00:00.007 [?参看dt数据类型] [此为121格式,120格式不带后面".nnn"]set @dt_date = @ch_date            --cast(@ch_date as datetime)--[help文档cast项里:注明varchar->datetime是隐性转换]select @dt_dateset @ch_time = '01:00:00'set @dt_time = @ch_timeselect @dt_time*/


[解决办法]
没必要
[解决办法]
如果只是单纯的转换一下,可以不用了,主要是有格式的问题,才要进行转换
[解决办法]
探讨
如果只是单纯的转换一下,可以不用了,主要是有格式的问题,才要进行转换

[解决办法]
SQL code
1.关于字符型和DATETIME类型的转化    由于时间类型的优先级高于字符型,所以当比较一个DATETIME类型的数据和一个字符串的时候,字符串首先会转化成DATETIME类型。A '20060102' '090807' '20090203 12:11:11.111'转化成时间类型的时候  B '2009-02-03 12:11:11.111'转化成时间类型的时候 不受会话语言设置影响(SET LANGUAGE) 注意B类型转换的时候不讷讷个省略它的时间部分。  2.字符型和DATETIME类型转换精度问题     --字符串转化成datetime ,转化后的时间比字符串慢了1毫秒,这是因为自动舍入到最近的百分之三秒declare @s varchar(100)set @s='2005-09-23 03:23:43:001'SELECT CAST(@s AS datetime)/*-----------------------2005-09-23 03:23:43.000*/---------------------------字符串转化成smalldatetime ,转化后的时间比字符串快了大约秒,这是因为自动舍入到最近的百分之三秒declare @s varchar(100)set @s='2005-09-23 03:23:43:001'SELECT CAST(@s AS Smalldatetime)/*-----------------------2005-09-23 03:24:00*/ ------------------还要注意 它们之间的转化并不是什么简单的截断数据 有精确到毫秒时候 毫秒部分匹配【0-9】【0-9】【037】SQL SERVER 有时候无法精确表示某个时间的瞬间,比如‘20090202 23:59:59.999’,自动舍入为‘20090203 00:00:00.000’  declare @s table (dates datetime)insert @sselect '20090211 00:00:00.000' union all select '20090212 00:00:00.000' select * from @s where dates between '20090211 00:00:00:000' and '20090211 23:59:59.999' --转化成-02-12 00:00:00.000/*dates-----------------------2009-02-11 00:00:00.0002009-02-12 00:00:00.000*/ select * from @s where dates >='20090211' and dates< '20090212' --SARG,优化器考虑使用Index Seek  ---------------2009-02-11 00:00:00.000*/ select * from @s where convert(varchar(8),dates,112)='20090211' /*Dates-----------------------2009-02-11 00:00:00.000*/本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feixianxxx/archive/2009/10/15/4677124.aspx
[解决办法]
SQL code
convert和cast是为了输出格式的转化--日期转换参数,值得收藏select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')20040912110608select CONVERT(varchar(12) , getdate(), 111 )2004/09/12select CONVERT(varchar(12) , getdate(), 112 )20040912select CONVERT(varchar(12) , getdate(), 102 )2004.09.12其它我不常用的日期格式转换方法:select CONVERT(varchar(12) , getdate(), 101 )09/12/2004select CONVERT(varchar(12) , getdate(), 103 )12/09/2004select CONVERT(varchar(12) , getdate(), 104 )12.09.2004select CONVERT(varchar(12) , getdate(), 105 )12-09-2004select CONVERT(varchar(12) , getdate(), 106 )12 09 2004select CONVERT(varchar(12) , getdate(), 107 )09 12, 2004select CONVERT(varchar(12) , getdate(), 108 )11:06:08select CONVERT(varchar(12) , getdate(), 109 )09 12 2004 1select CONVERT(varchar(12) , getdate(), 110 )09-12-2004select CONVERT(varchar(12) , getdate(), 113 )12 09 2004 1select CONVERT(varchar(12) , getdate(), 114 )11:06:08.177 


[解决办法]

SQL code
--varchar和datetime互相转换为隐性转换,还有必要使用Cast和Convert么?一个是隐士 完全装换一个是显士 还有进一步处理!
[解决办法]
主要是转换的格式和精度的问题
关于隐式转换的常见问题,可以参照:
http://blog.csdn.net/robinson_0612/archive/2010/03/16/5385065.aspx
[解决办法]
如果目标字段本身就是datetime类型的就没有必要了,不过数据一般不太精确.如果是自己定义表的话就需要了.
[解决办法]
convert()有三个参数,最后一参数可指定格式
[解决办法]
探讨
引用:
如果只是单纯的转换一下,可以不用了,主要是有格式的问题,才要进行转换

我看隐性转换datetime都是121格式
感觉SQL SERVER 【2k】没有oracle的格式那么好用:(

热点排行