对于字符串向smalldatetime转换失败问题的解决

对于字符串向smalldatetime转换失败问题的解决此类问题一般出现于动态存储过程,我以up_selectTradeInfo为例简单说明该问题的解决方法 –建表–银行卡表GOUSEBankCardManageDBGOIFEXISTS(SELECT*FROMsys.objectsWHERENAME=BankCard) DROPTABLEBankCardCREATETABLEBankCard ( ID intiden

大家好,又见面了,我是你们的朋友全栈君。此类问题一般出现于动态存储过程,我以up_selectTradeInfo为例简单说明该问题的解决方法 



–建表
–银行卡表
GO
USE BankCardManageDB
GO
IF EXISTS (SELECT * FROM sys.objects WHERE NAME=’BankCard’)
DROP TABLE BankCard
CREATE TABLE BankCard  
(
ID
int identity(1,1),
CardID char(10) PRIMARY KEY,
BankName varchar(20) NOT NULL,
UserName varchar(20) NOT NULL,
Deposit money NOT NULL DEFAULT(0),
Payout money NOT NULL DEFAULT(0)
)
GO

–交易记录表
USE BankCardManageDB
IF EXISTS(SELECT * FROM sys.objects WHERE NAME=’Trade’)
DROP TABLE Trade
CREATE TABLE Trade  
(
TradeID BIGINT PRIMARY KEY IDENTITY(1,1),
CardID CHAR(10) FOREIGN KEY REFERENCES BankCard(CardID) NOT NULL,
TradeDate DATETIME NOT NULL,
TradeMoney MONEY CHECK(TradeMoney>0),
TradeType char(8) CHECK(TradeType=’存钱’ or TradeType=’取钱’)
)
GO

–插入测试数据
INSERT INTO BankCard VALUES(‘123456766′,’工商银行’,’田国兴’,2000,200)
INSERT INTO Trade VALUES(‘123456766′,’20080921′,30000,’存钱’)

–创建存储过程 up_selectTradeInfo 查询时间段内卡的交易信息

USE BankCardManageDB

GO
IF EXISTS(SELECT * FROM sys.objects WHERE name=’up_selectTradeInfo’)
DROP PROCEDURE up_selectTradeInfo
GO
CREATE PROCEDURE up_selectTradeInfo
@cardID varchar(10),
@startDate smalldatetime,–时间上限
@endDate smalldatetime
–时间下限
AS 
BEGIN
DECLARE @sqlStr varchar(300)
SET @sqlStr=’SELECT * FROM Trade WHERE CardID=’+str(@cardID)
+’ AND TradeDate BETWEEN ‘+@startDate+’ AND ‘+@endDate
EXEC(@sqlStr)
END

exec up_selectTradeInfo ‘123456766’,’20080920′,’20080921′


在执行存储过程时,发生以下错误
消息 295,级别 16,状态 3,过程 up_selectTradeInfo,第 11 行

将字符串转换为 smalldatetime 数据类型时失败

具体解决办法如下:
把存储过程里面的SET @sqlStr一句改为(嵌套转换)
SET @sqlStr=’SELECT * FROM Trade WHERE CardID=’+str(@cardID)
+’ AND TradeDate BETWEEN
CONVERT(SMALLDATETIME,’+””+CONVERT(VARCHAR,@startDate,112)+””+’,120)’

+’ AND CONVERT(SMALLDATETIME,’+””+CONVERT(VARCHAR,@endDate,112)+””+’,120)’
(注意:在数据类型为datetime时最好不要使用那个BETWEEN)
再执行
exec up_selectTradeInfo ‘123456766’,’20080920′,’20080921′
返回
TradeID              CardID     TradeDate               TradeMoney            TradeType
——————– ———- ———————– ——————— ———
18                   123456766  2008-09-21 00:00:00     30000.00              存钱    

(1 行受影响)
问题解决!!



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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144781.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • tomcat日志乱码怎么解决_linux日志中文乱码

    tomcat日志乱码怎么解决_linux日志中文乱码中文乱码大家在Windows启动Tomcat应该都会遇到中文乱码,其实也不影响使用,但是笔者看着这个乱码难受,于是提供一种较简单的解决方案。解决方案将Tomcat安装目录下/conf/logging.properties中的控制台日志编码由默认的UTF-8改为GBK即可。扩展乱码原因:Windows的控制台默认使用GB2312字符集,而Tomcat控制台日志输出默认使用UTF-8字符集,于是产生中文乱码,可使用chcp命令暂时修改控制台字符集

  • 【源码分析】Kafka分区重分配/迁移(kafka-reassign-partitions.sh)

    【源码分析】Kafka分区重分配/迁移(kafka-reassign-partitions.sh)/***Thiscallbackisinvokedbythereassignedpartitionslistener.Whenanadmincommandinitiatesapartition*reassignment,itcreatesthe/admin/reassign_partitionspaththattriggersthezookeeperlistener.*Reassigningreplicasforapar

  • java工厂模式三种详解(部分转载)

    java工厂模式三种详解(部分转载)工厂方法模式(FactoryMethod)工厂方法模式分为三种:1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口:[java]viewplaincopypublicinterfaceSender{ publicvoidSe…

  • 12个MySQL慢查询的原因分析「建议收藏」

    12个MySQL慢查询的原因分析「建议收藏」12个MySQL慢查询的原因分析

    2022年10月14日
  • pycharm提示no python interpreter_pycharm代码运行不了

    pycharm提示no python interpreter_pycharm代码运行不了Pycharm配置:解决方法如下方法一:Pycharm配置环境变量,ProjectInspector确认有Python3.7齿轮栏点Add,选ExistingEnvironment就好然后在Inspector选项找安装目录的Python.exe选择好了之后点击OK,之后选择Makeavaliableforallappliction再点OK就行了New新建一个pythonfile,然后就可以开始写代码了写完之后右键代码选择下面绿色的播放键Run就可以测试.

  • StringBuilder详解「建议收藏」

    StringBuilder详解「建议收藏」1、简介StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。StringBuilder的层次结构如下:StringB

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号