积极答复者
SQL格式转换问题

问题
-
有如下语句:
select top 10 * from dbo.View_log_in_del viewlogind0_ where 1=1
and viewlogind0_.ATTACHMENT<>'-'
and cast(viewlogind0_.ATTACHMENT as DATETIME)>='2015-08-03 16:00:00'
order by viewlogind0_.ORDNO asc其中attachment字段默认值为 -
转换前的格式为 07 6 2015 4:10PM
当执行语句时会报错:从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
当不执行order by子语句时,不报错
当不使用top 关键字时,也不报错
请教order by或者top对该语句的影响与可能的错误原因?
- 已编辑 BQSs 2015年8月27日 1:17
答案
-
研究了一下日期和字符串的转换, 默认的转换使用的格式是:
mon dd yyyy hh:miAM(或 PM)
问题就在 mon 这里, 07 6 2015 4:10PM 这个日期,mon 的位置是 07, 如果当前会话 language 对于月份的定义不是数字的话,转换就会失败,比如是 english 的话,月份是用英文月份(全称或简写)表示的,所以在 english 下转换不成功的
- 已建议为答案 Steven.桦仔 2015年8月28日 3:01
- 已标记为答案 Nan YuMicrosoft contingent staff, Moderator 2015年9月4日 2:22
全部回复
-
表中的数据不规范导致的, 07 6 2015 4:10PM 这个不是sql server支持的日期格式
跟当前的会话的 language 有关系
-- 这个没有问题 set language 简体中文 select cast('07 6 2015 4:10PM' as datetime), cast(' 07 6 2015 4:10PM' as datetime) go -- 这个有问题 set language english select cast('07 6 2015 4:10PM' as datetime), cast(' 07 6 2015 4:10PM' as datetime)
-
研究了一下日期和字符串的转换, 默认的转换使用的格式是:
mon dd yyyy hh:miAM(或 PM)
问题就在 mon 这里, 07 6 2015 4:10PM 这个日期,mon 的位置是 07, 如果当前会话 language 对于月份的定义不是数字的话,转换就会失败,比如是 english 的话,月份是用英文月份(全称或简写)表示的,所以在 english 下转换不成功的
- 已建议为答案 Steven.桦仔 2015年8月28日 3:01
- 已标记为答案 Nan YuMicrosoft contingent staff, Moderator 2015年9月4日 2:22