用DELPHI7.0,数据库存储在SQL Server中,我想对表中的日期进行模糊查询:比如说,在文本框中输入‘2003’,则显示03年的所有记录;同样,输入‘2003-8-13’,则显示此日期的所有记录。我写的SQL语句如下:
  'select * from 测试参数 where 测试日期 Like '''+EdtTestDate.Text+'%'+''''    其中edttestdate为日期变量的输入框;但是,实际运行时,输入一个日期如‘2003’或‘2003-8-13’,却不能返回任何结果;如果进行完全匹配的查询(将like 改成‘=’,去掉‘%’),则查询正常。另外,在SQL Server中,‘测试日期’一项,采用的是smalldatetime类型。是不是数据库类型设置的问题?如果对日期型变量进行模糊查询,应该如何改进我的SQL语句?请各位高手指教!

解决方案 »

  1.   

    select * from Table1 where year(DateField)=3
      

  2.   

    去看吧
    http://expert.csdn.net/Expert/topic/2189/2189086.xml?temp=.347027
    我在那里已经说过了
      

  3.   

    还有一种方法就是,如果系统中的日期时间字段只保存到日,而不何存时间,你可以根本就不用DataTime类型字段,写个函数全部转换成字符串,如2003-08-30 换成'20030830',这样什么查找问题就解决了。
      

  4.   

    到SQL_Server
    里去试你的sql语句
    一般对日期模糊查询,我一般用两个maskedit,sql语句用between……and……
      

  5.   

    当你使用LIKE=’YYYY-MM-DD%’去执行的时候,SQL SERVER将把表中的日期类型转成字符串看了,于是,本来是‘2003-08-05 00:00:00.000’,转换以后变成’08  5 2003 12:00AM’,你的LIKE还能起作用吗?(能当然能,但你还得告诉用户按转换后的格式输入)
    其实,对于日期常用的就是“BETWEEN BDATE AND EDATE”,直接用DATETIMEPICKER控件;如果你确实想方便客户(他想模糊查询),那就建议你在程序中去拼凑好字符串的样式,再去LIKE