【求看】数据类型的转换导致 datetime 值越界!!!存储过程
ALTER PROC SP_RCL
@SDATE VARCHAR(10)
AS
SET @SDATE=CONVERT(VARCHAR(7),CONVERT(DATETIME,@SDATE+'-01'),120)
SELECT CONVERT(VARCHAR(10),CONVERT(DATETIME,RQ),120)'SDATE',BC,ZBDD,ZKYQ,ZKSJ,BZ1,ZT1,SBD_MET,SBD_CNT,[SBD_P+],G_PAD,G_Q,[P+ET],CNT_ET,G_Q2,BZ2,ZT2,[P+ANL],RTA,FOX,BZ3,ZT3,ZM,BM,PM_ET,BZ4,ZT4,JBL,TLL,BZ5,ZT5,SBD_RK,MOS_RK,ZT6 FROM RCL
WHERE CONVERT(VARCHAR(7),RQ,120)=@SDATE
GO
--------------------------------运行下面的
SP_RCL'2014-03-17'
-------------------------------得出提示
服务器: 消息 242,级别 16,状态 3,过程 SP_RCL,行 4
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
(所影响的行数为 0 行)
请问这个是哪里的问题啊?怎么修改呢?烦请指教!!!------解决方案--------------------这句 有问题把:
SET @SDATE=CONVERT(VARCHAR(7),CONVERT(DATETIME,@SDATE+'-01'),120)
修改成这样试试;
SET @SDATE=CONVERT(VARCHAR(7),cast(@SDATE as datetime),120)
------解决方案--------------------试试:
SET @SDATE = CONVERT(VARCHAR(7), cast( @SDATE + '-01' AS VARCHAR), 120)
SELECT CONVERT(VARCHAR(10), RQ, 120) 'SDATE' ,
BC ,
ZBDD ,
ZKYQ ,
ZKSJ ,
BZ1 ,
ZT1 ,
SBD_MET ,
SBD_CNT ,
[SBD_P+] ,
G_PAD ,
G_Q ,
[P+ET] ,
CNT_ET ,
G_Q2 ,
BZ2 ,
ZT2 ,
[P+ANL] ,
RTA ,
FOX ,
BZ3 ,
ZT3 ,
ZM ,
BM ,
PM_ET ,
BZ4 ,
ZT4 ,
JBL ,
TLL ,
BZ5 ,
ZT5 ,
SBD_RK ,
MOS_RK ,
ZT6
FROM RCL
WHERE CONVERT(VARCHAR(7), RQ, 120) = @SDATE
------解决方案--------------------或者更加简单的:
SET @SDATE=left(@SDATE,7)