use*_*495 76 t-sql sql-server datetime
运行SQL到我的数据类型值从转换的时候,我一直得到以下错误varchar
来datetime
.
消息242,级别16,状态3,行1将varchar数据类型转换为日期时间数据类型导致超出范围的值.
我已经检查了数据并且看不到任何奇怪的东西:执行以下检查并且所有返回都没有结果
SELECT [Date] from table where [DATe] is null
SELECT [Date] from table where [DATe] = ''
SELECT [Date] from table where LEN([date])> 10
SELECT [Date] from table where LEN([date])< 10
SELECT top 100 [Date] , SUBSTRING([date],4,2) from [table where convert(int, SUBSTRING([date],4,2)) < 1 or convert(int, SUBSTRING([date],4,2)) > 12
SELECT top 100 [Date] , SUBSTRING([date],1,2) from table where convert(int, SUBSTRING([date],4,2)) < 1 or convert(int, SUBSTRING([date],4,2)) > 31
Run Code Online (Sandbox Code Playgroud)
还有什么值得关注的东西,可能值得指点或帮助解决这个问题吗?似乎无法深究它.
Mah*_*ahe 68
我一周前遇到了同样的问题.问题在于时区设置.以mm/dd/yyyy等其他格式指定(通常有效).
将日期指定为2013年12月30日导致我的错误.但是,将其指定为mm/dd/yyyy格式.
如果您需要转换输入,可以尝试查看CONVERT
方法.语法是
CONVERT(VARCHAR,@your_date_Value,103)
CONVERT(VARCHAR, '12/30/2013', 103)
完成103是日期时间格式.
请参阅此链接以获取转换格式和进一步阅读. http://www.w3schools.com/sql/func_convert.asp
Mr.*_*. C 55
由于一个愚蠢的错误,我遇到了这个问题.确保日期确实存在!
例如:
2015年9月31日不存在.
EXEC dbo.SearchByDateRange @Start = '20150901' , @End = '20150931'
Run Code Online (Sandbox Code Playgroud)
所以这失败的消息:
Error converting data type varchar to datetime.
Run Code Online (Sandbox Code Playgroud)
要修复它,请输入有效日期:
EXEC dbo.SearchByDateRange @Start = '20150901' , @End = '20150930'
Run Code Online (Sandbox Code Playgroud)
它执行得很好.
小智 21
我最近有类似的问题.在应用程序和数据库服务器中正确设置了区域设置.但是,执行SQL导致了
"将varchar数据类型转换为日期时间数据类型会导致超出范围的值".
问题是db用户的默认语言.
要在SSMS中检查或更改它,请转到安全性 - >登录,然后右键单击运行查询的用户的用户名.选择属性 - >常规,并确保对话框底部的默认语言符合您的预期.
对运行查询的所有用户重复此操作.
你可以利用
Set dateformat <date-format> ;
Run Code Online (Sandbox Code Playgroud)
在你sp函数或存储过程中完成任务.
小智 5
Create procedure [dbo].[a]
@examdate varchar(10) ,
@examdate1 varchar(10)
AS
Select tbl.sno,mark,subject1,
Convert(varchar(10),examdate,103) from tbl
where
(Convert(datetime,examdate,103) >= Convert(datetime,@examdate,103)
and (Convert(datetime,examdate,103) <= Convert(datetime,@examdate1,103)))
Run Code Online (Sandbox Code Playgroud)