在项目开发过程中,我们经常要做一些以时间为条件的查询,比如查询指定时间范围内的历史记录,然而这些时间都是从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.错误的解决办法的更多相关文章

  1. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法

    在 IOS 开发当中经常碰到 whose view is not in the window hierarchy 的错误,该错误简单的说,是由于 "ViewController" ...

  2. python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法

    gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...

  3. Android Studio中出现Gradle's dependency cache may be corrupt错误的解决办法

    起因 某次打开AS,提示升级AS,升级后,提示升级gradle,选择升级. 结果在升级gradle时耗时较久,没有耐心,点击停止升级gradle, 还是停在那里,然后关闭AS,还是没反应,启动任务管理 ...

  4. sql语句中获取datetime的日期部分或时间部分

    sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...

  5. sql语句中获取datetime任何部分

    sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...

  6. sql server2000中使用convert来取得datetime数据类型样式(全)

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  7. 存储过程往拼接的sql语句中传递日期值

    存储过程往拼接的sql语句中传递日期值 declare @start datetime declare @end datetime set @start='2014-3-1' set @end='20 ...

  8. (转载)SQL语句中Group by语句的详细介绍

    转自:http://blog.163.com/yuer_d/blog/static/76761152201010203719835 SQL语句中Group by语句的详细介绍              ...

  9. SQL语句中日期的计算方法大全

    sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...

随机推荐

  1. Linux C++ 开发常用工具,常用指令工作手册

    vim常用: :set nu显示行数 :set mouse=a 鼠标滑动屏幕,:set ic :set noic 忽略不忽略大小写 /word_to_search\c \c表示忽略大小写 c小写忽略, ...

  2. vpython初探

    vpython 是python默认的3D模块,和python有一样的风格.与PyOpenGL相比,容易上手. vpython下载:vpython的官网(www.vpython.org).顺便说一句,官 ...

  3. Mac Virtual System On Windows

    Win8.1下利用虚拟机安装苹果操作系统 所需文件: 虚拟机:VMware -10.0.1,这个就是中文版的了. 虚拟机密钥生成器:vm10keygen,要对应虚拟机的版本. 虚拟机的插件: unlo ...

  4. JSNO

    JSON 编辑 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...

  5. [转]双数组TRIE树原理

    原文名称: An Efficient Digital Search Algorithm by Using a Double-Array Structure 作者: JUN-ICHI AOE 译文: 使 ...

  6. AngularJS之ng-options的best practise

    废话不多说,直接上代码. function MySelectCtrl($scope) { $scope.Model = [ { id: 10002, MainCategory: '男', Produc ...

  7. python+eclipse环境搭建

    一.Eclipse 的安装 Eclipse的安装是很容易的.Eclipse是基于java的一个应用程序,因此需要一个java的运行环境(JRE)才行.(我这里主要介绍windows下的安装) JRE的 ...

  8. TeamViewer11使用教程

    下载地址(官网):http://res.ncmem.com/download/TeamViewer11.exe 下载地址(360):https://yunpan.cn/cvxRiTfSC3iH6(访问 ...

  9. [UCSD白板题] Least Common Multiple

    Problem Introduction The least common multiple of two positive integers \(a\) and \(b\) is the least ...

  10. JDK6环境下升级项目到springframework4.x和tomcat7.x

    springframework 3.x升级到 4.x  1 xsi:schemaLocation 对应的3.x->4.x 2 pom  springframework <propertie ...