您的位置:首页 > 数据库

SQLServer Datetime数据类型的转换

2011-07-08 10:24 417 查看
        在T-SQL中,表示用作输入数据的DATETIME字面值是一件比较棘手的事情,当你需要表示时间时,可以使用能够隐式转换为DATETIME的字符串。如果字符串出现在期望DATETIME的上下文中,——例如INSERT或UPDATE语句中DATETIME列的目标值,它将被隐式的转换为DATETIME,同样,当表达式包含不同类型的操作数,一般情况下优先级最高的操作数决定了所有操作数的数据类型。时间类型的优先级比字符产高,所以,如果你比较两个值,一个是DATETIME类型,一个是字符串类型,字符串将隐式转换为DATETIME类型。

        更为混乱的是各种DATETIME值的表示习惯,“02/12/06”对于不同的人有不同的意义,当这个字符串必须转换为DATETIME时,SQLServer将根据当前会话的语言设置进行转换,会话语言是由登陆的默认语言决定的,也可以使用SET LANGUAGE会话选项重新设置。

        通过使用SET DATEFORMAT选项,指定字符串d,m和y组合,也可以控制如何解释由数字和分隔符组成的DATETIME字面值。例如mdy表示月日年。另外,SET LANGUAGE隐式的设置DATEFORMAT,使之匹配该语言的日期格式习惯。

        这样,就有办法控制如何解析DATETIME字面值,但这是通过上述的SET选项来实现的,这些选项将改变整个会话的行为。如果会话中还有一些代码依赖于登录的默认语言该怎么办?

        SQLServer中有两种DATETIME的字面格式独立于任何设置。其中一种格式,它的时间部分没有分隔符:‘[yy]yymmdd[hh:mi[:ss][.mmm]]’。’20060212’、'060212'、和'20060121 23:59:59.997'都是这种格式的DATETIME字面值.DATEFORMAT和LANGUAGE设置不影响对这种格式的DATETIME字符串的解释。

        还有一种独立于设置的格式:;'yyyy-mm-ddThh:mi:ss[.mmm]'。'2006-02-12T13:32:12’就是这种格式,使用这种格式不能省略其时间部分。

        还有一种方法是使用CONVERT函数显示的转换字符串到DATETIME,调用该函数时,可以指定可选的style参数,例如如果你想使用英/法样式,年份为两位数字,指定style为3,CONVERT(DATETIME,’10/02/05’,3),支持样式的完整列表,可以参考联机丛书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐