SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法
在项目开发过程中,我们经常要做一些以时间为条件的查询,比如查询指定时间范围内的历史记录,然而这些时间都是从UI传递过来的参数,所以我们写的sql语句就必须用到字符串拼接。当然,在C#中写SQL语句还好处理,可以使用C#的字符串函数做对应的数据类型转换。但是,如果用的是存储过程的话,就有点纠结了。下面来说一下我在写存储过程中遇到的问题:
为了更加直接的说明问题,写如下一个简单的例子:
declare @dateFrom datetime;
declare @dateTo datetime;
declare @str nvarchar(500);
declare @strOne nvarchar(100);
declare @strTwo nvarchar(200);
declare @sql nvarchar(1000); set @dateFrom = '2014-01-01';
set @dateTo = getdate(); set @strOne = ' and DateCreated >= ' + @dateFrom; set @str = 'select * from Users where 1 = 1';
set @sql = @str + @strOne; print @sql; exec sp_executesql @sql
这个时候,执行SQL的话,就会出现如下错误:

分析原因,主要是因为@dateFrom数据类型为Datetime,和字符串连接时类型不匹配,所以下面就来做类型转换:
SQL Server中有个Convert函数,可以用来做类型转换,用法如下:
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法
CONVERT(data_type(length),data_to_be_converted,style) data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
实例
下面的脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获得当前的日期/时间:
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
结果类似:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635 参照上面用法,我们修改代码如下:
declare @dateFrom datetime;
declare @dateTo datetime;
declare @str nvarchar(500);
declare @strOne nvarchar(100);
declare @strTwo nvarchar(200);
declare @sql nvarchar(1000); set @dateFrom = '2014-01-01';
set @dateTo = getdate(); -- set @strOne = ' and DateCreated >= ''' + convert(nvarchar(20),@dateFrom,20) + '''';
-- set @strTwo = ' and DateCreated <= ''' + convert(nvarchar(20),@dateTo,20) + ''''; set @strOne = ' and t68DateCreated between ''' + convert(nvarchar(20),@dateFrom,20)
+ ''' and ''' + convert(nvarchar(20),@dateTo,20) + ''''; -- select * from Authors_t68 where Users between @dateFrom and @dateTo
set @str = 'select * from Authors_t68 where 1 = 1'; -- set @sql = @str + @strOne + @strTwo;
set @sql = @str + @strOne; print @sql; exec sp_executesql @sql
这个时候,执行,就可以查询出结果了。两种拼接方法,注释掉的使用了两个条件来限定时间范围,后一种方法用的是between...and方法。
SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法的更多相关文章
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...
- python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法
gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...
- Android Studio中出现Gradle's dependency cache may be corrupt错误的解决办法
起因 某次打开AS,提示升级AS,升级后,提示升级gradle,选择升级. 结果在升级gradle时耗时较久,没有耐心,点击停止升级gradle, 还是停在那里,然后关闭AS,还是没反应,启动任务管理 ...
- sql语句中获取datetime的日期部分或时间部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- sql语句中获取datetime任何部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- sql server2000中使用convert来取得datetime数据类型样式(全)
sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...
- 存储过程往拼接的sql语句中传递日期值
存储过程往拼接的sql语句中传递日期值 declare @start datetime declare @end datetime set @start='2014-3-1' set @end='20 ...
- (转载)SQL语句中Group by语句的详细介绍
转自:http://blog.163.com/yuer_d/blog/static/76761152201010203719835 SQL语句中Group by语句的详细介绍 ...
- SQL语句中日期的计算方法大全
sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...
随机推荐
- python文件、数据库读写编码的问题
读写utf-8文件 fh = open(file_name, 'r', encoding = 'UTF-8') 读写数据库utf-8格式 connect = pymysql.connect(host= ...
- Web程序的运行原理及流程(一)
自己做Web程序的开发也有两年多了 从最开始跟风学框架 到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来 我当时第一次做WEB项目看 ...
- spring in action 第五章基于注解搭建SpringMvc环境
request的生命历程
- js获取焦点
<input type = "text" id="football" /> 对上面获取焦点. 1.获取dom对象 var domFocus = do ...
- java设计模式之-----桥接模式
一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又 ...
- 详解在Visual Studio中使用git版本系统[转]
这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...
- 编写可维护的JavaScript
第一章 1.基本的格式化 1.1推荐使用Tab键插入4分字符 1.2语句结尾要使用分号 1.3一行的长度最好不要超过80个字符 1.4通常在运算符后换行,下一行增加2个层级的缩进 1.5推荐在以下场景 ...
- java 枚举类型知识点记录
在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum.枚举类型是由一组固定的常量组成的类型.枚举本质是int值.因为枚举类型没有可以访问的构造器,所以枚举类 ...
- oracle exists
公司项目中有用到exists,感觉挺有用的,拷贝一些感念的东西. “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T ...
- 使用maven引入Apache poi jar包
maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包: ...