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月到日期的数据库中的所有值
您在varchar(25)上进行了字符串比较,而不是日期比较,因此完全符合预期.也就是说,字符串'06 -06-2011'在字符串'31 -05-2011'之前
添加一些样式112的CONVERT并比较实际日期.
或者修复您的数据...... dd-mm-yyyy应该在客户端代码中设置格式,数据库应该是本机日期/时间类型.