微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL错误:将varchar数据类型转换为datetime数据类型导致值超出范围

如何解决SQL错误:将varchar数据类型转换为datetime数据类型导致值超出范围

sql Server中使用的安全日期时间字符串格式为

YYYYMMDD HH:MM:SSYYYY-MM-DDTHH:MM:SS

如果SET DATEFORMAT为dmy,则转换将失败。设置语言自动为您设置日期格式。我认为无论是germannorwegian使用DMY。

这将失败:

set language norwegian

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'/'+SUBSTRING(@F7,4,2)+'/'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + ' ' + @F8)

无论使用哪种语言/日期格式设置,都应这样做(使用YYYY-MM-DDTHH:MM:SS)以确保安全。

declare @F7 varchar(10) = '26/04/2011'
declare @F8 varchar(10) = '00:09:13'

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'-'+SUBSTRING(@F7,4,2)+'-'+LEFT(@F7,2)

DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME, @Date + 'T' + @F8)

解决方法

数据输入:

<F1>000001234</F1>
<F2>133228579</F2>
<F3>2011-05-25</F3>
<F4>21-332211</F4>
<F5>TxtMail</F5>
<F6/>
<F7>26/04/2011</F7>
<F8>00:09:13</F8>
<F9>0:00</F9>
<F10/>
<F11/>
<F12>Text Service</F12>
<F13>0294443333</F13>
<F14>TXT</F14>
<F15>FR</F15>
<F16>0.17</F16>

存储过程的相关部分:

@F1     VARCHAR(24) = NULL,--AccountNumber
@F2     VARCHAR(24) = NULL,--InvoiceNumber
@F3     VARCHAR(24) = NULL,--InvoiceDate
@F4     VARCHAR(24) = NULL,--CallerNumber
@F5     VARCHAR(10) = NULL,--Service
@F6     VARCHAR(10) = NULL,--
@F7     varchar(24) = NULL,--CallDate
@F8     VARCHAR(24) = NULL,--CallTime
@F9     VARCHAR(50) = NULL,--Duration
@F10    VARCHAR(50) = NULL,--
@F11    VARCHAR(10) = NULL,--
@F12    VARCHAR(24) = NULL,--Network
@F13    VARCHAR(24) = NULL,--CallingNumber
@F14    VARCHAR(10) = NULL,--Type
@F15    VARCHAR(10) = NULL,--TypeName
@F16    MONEY       = NULL,--Amount

DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'/'+SUBSTRING(@F7,4,2)+'/'+LEFT(@F7,2)

-- Combine the date and time into a datetime data type
-- For Time 
DECLARE @time DATETIME
SET @time =  CONVERT(DATETIME,@Date + ' ' + @F8)

错误:将varchar数据类型转换为datetime数据类型导致值超出范围。

这是CONVERT(DATETIME)的唯一调用,并且我不使用CAST

如果我只是直接传递数据,则会插入该行。如果我运行该存储过程,它将超出范围。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。