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),支持样式的完整列表,可以参考联机丛书。
更为混乱的是各种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),支持样式的完整列表,可以参考联机丛书。
相关文章推荐
- sqlserver查询报从char数据类型到datetime数据类型的转换导致datetime值越界
- 将Excel数据导入到SqlServer及导入时数据类型转换失败解决方案
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
- MySQL------MySQL与SQLServer数据类型的转换
- 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界
- 把string类型的时间数据,转换成datetime类型。
- 如何从SQLServer类型转换成Oracle对应的数据类型
- Entity Framework 更新数据库 datetime 类型的问题 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
- 对php datetime类型的数据转换成字符串的处理
- [SQL]不要让SQLServer帮你自动转换SQL命令中的数据类型
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
- (转)从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
- sqlServer DateTime数据类型的格式转换
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
- Java Date和MySQL datetime数据类型转换
- SQL中查询ORCALCE库数据 报错误:从数据类型 DBTYPE_DBTIMESTAMP 转换为 datetime 时出错
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
- 【SqlServer】SQL Server2000中使用convert来取得datetime数据类型样式
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值