在sql server 2008中使用函数之间的问题

nav*_*ngo 0 sql-server sql-server-2008

我正在使用asp.net 2005和Microsoft SQL Server 2008开发一个Web应用程序.我需要一个帮助来从给定范围内的数据库中获取数据.

我表中的日期字段是VARCHAR(25)类型,存储的日期格式是dd-mm-yyyy.当我在SQL查询中使用between子句时,它没有提供所有数据,即where子句中的日期条件不能正常工作.

而我的客户要求是将日期格式保持为dd-mm-yyyy并根据给定范围获取数据.

所以请帮我解决一下在这种情况下我应该做些什么.

SQL查询:

@datefrom varchar(15),  // parameter in the procedure           
@dateto varchar(15) 

set @sql = '';     
set @sql = @sql +  'SELECT * FROM ven_timesheetreportmaster vtsrm WITH (nolock)    
                    INNER JOIN ven_descriptionmaster_timesheet vdmts ON vdmts.description_id = vtsrm.description_id '  
set  @sql  = @sql +  ' WHERE vtsrm.entry_date BETWEEN ''' + @datefrom + ''' AND  ''' + @dateto  + '''  '

if ( @emp_id !='0')    
    set  @sql  = @sql +  ' AND vtsrm.emp_id =' + @emp_id + ' '  
Run Code Online (Sandbox Code Playgroud)

ven_timesheetreportmaster 表中,entry_date是一个varchar数据类型..

如果我传递价值,

@date from : 01-05-2011
@date to : 31-05-2011
Run Code Online (Sandbox Code Playgroud)

它显示了从4月到日期的数据库中的所有值

gbn*_*gbn 5

您在varchar(25)上进行了字符串比较,而不是日期比较,因此完全符合预期.也就是说,字符串'06 -06-2011'在字符串'31 -05-2011'之前

添加一些样式112的CONVERT并比较实际日期.

或者修复您的数据...... dd-mm-yyyy应该在客户端代码中设置格式,数据库应该是本机日期/时间类型.