SQL日期转换问题[急,在线等]

snowwolf613 2009-11-12 02:01:53
Declare @Date DateTime
Select @Date='2009-09-25'
Select CONVERT(DATETIME,CONVERT(VARCHAR(10),@Date))

以上脚本在大部分的数据库(不同服务器)中都可正常运行,但今天发现有一台不可以,会报错:

Msg 242, Level 16, State 3, Line 3
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

而且在可正常运行的数据库中,有的是SQL2000 有的是2005,所以可以排除版本问题,不知道是不是服务器或数据库哪里的设定,没设好;

还请各位高手不吝赐教,谢谢!

* 不是这个语句要有什麼意义,这个脚本只是用来说明问题的
...全文
92 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowwolf613 2009-11-13
  • 打赏
  • 举报
回复
谢谢各位的参与,这个问题已经解决了,是默认语言的问题;

我不确定是不是我的表达能力太有限,感觉好像各位是没明白我的提问的重点;

除了 1 楼、10 楼的朋友,有说到默认值设定的问题
luoyoumou 2009-11-12
  • 打赏
  • 举报
回复
Declare @Date DateTime
Select @Date='2009-09-25'
Select CONVERT(DATETIME,CONVERT(VARCHAR(10),@Date,120))

--加个120
luoyoumou 2009-11-12
  • 打赏
  • 举报
回复
--数据库好像有一个默认的日期格式吧,可能你的数据库默认的日期格式不是120,是其他的格式!
snowwolf613 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sql77 的回复:]
引用 4 楼 snowwolf613 的回复:
引用 2 楼 sql77 的回复:
SQL codeDeclare@DateDateTimeSelect@Date='2009-09-25'SelectCONVERT(DATETIME,CONVERT(VARCHAR(10),@Date,120))------------------------------------------------------2009-09-2500:00:00.000

(所影响的行数为1 行)

加个格式,或用ISDATE()判断下


  是的,加了格式可以运行;但是之前别人写的脚本很多这种转换都没有加格式,现在大量报错,一个一个改太麻烦,而且这个问题在别的机器上不会出现;

所以我想会不会是哪里设定的问题

我是说你传进去的日期要判断一下,能转成日期行吗
[/Quote]

传进去的那个字段本身就是Datetime 型的。 如果是要改脚本是可以改,只是太麻烦。

我现在问题的重点是:为什么同样的脚本,在大部分电脑上是可以的,而就在他那台上却不可以,会报错;
snowwolf613 2009-11-12
  • 打赏
  • 举报
回复
我这里写的脚本是直接用 '2009-09-25' 赋值,在实际的程序里面是用的字段名,那个字段是 DateTime 型的;

各位老大,我现在说的不是这个语句本身的问题,是想问在服务器或是数据库上是不是有什么设定,导致同样的脚本在有的地方运行不了;

忆轩辕 2009-11-12
  • 打赏
  • 举报
回复
错误很明显,你的@date 赋的值不对
SQL77 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 snowwolf613 的回复:]
引用 2 楼 sql77 的回复:
SQL codeDeclare@DateDateTimeSelect@Date='2009-09-25'SelectCONVERT(DATETIME,CONVERT(VARCHAR(10),@Date,120))------------------------------------------------------2009-09-2500:00:00.000

(所影响的行数为1 行)

加个格式,或用ISDATE()判断下


  是的,加了格式可以运行;但是之前别人写的脚本很多这种转换都没有加格式,现在大量报错,一个一个改太麻烦,而且这个问题在别的机器上不会出现;

所以我想会不会是哪里设定的问题
[/Quote]
我是说你传进去的日期要判断一下,能转成日期行吗
幸运的意外 2009-11-12
  • 打赏
  • 举报
回复
语句本身没有什么问题的,看起来
snowwolf613 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sql77 的回复:]
SQL codeDeclare@DateDateTimeSelect@Date='2009-09-25'SelectCONVERT(DATETIME,CONVERT(VARCHAR(10),@Date,120))------------------------------------------------------2009-09-2500:00:00.000

(所影响的行数为1 行)

加个格式,或用ISDATE()判断下
[/Quote]

是的,加了格式可以运行;但是之前别人写的脚本很多这种转换都没有加格式,现在大量报错,一个一个改太麻烦,而且这个问题在别的机器上不会出现;

所以我想会不会是哪里设定的问题
snowwolf613 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fredrickhu 的回复:]
有可能是日期格式不正确

比如说超过了9999年

比如说写成了其他格式
[/Quote]

没有;

我就是拿上面的脚本直接在那台上运行,就是报错;

而在大部分的数据库上不会有问题,我这边也没这个问题;
SQL77 2009-11-12
  • 打赏
  • 举报
回复
Declare @Date DateTime 
Select @Date='2009-09-25'
Select CONVERT(DATETIME,CONVERT(VARCHAR(10),@Date,120))


------------------------------------------------------
2009-09-25 00:00:00.000

(所影响的行数为 1 行)


加个格式,或用ISDATE()判断下
--小F-- 2009-11-12
  • 打赏
  • 举报
回复
有可能是日期格式不正确

比如说超过了9999年

比如说写成了其他格式

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧