这不好算SQL的问题
其实这是日期的表示必须要'',比如
SELECT DHHM, SLRQ, XFRQ, ZJMC  FROM dbo.TDLS  WHERE SLRQ>='2003-01-01' and SLRQ>='2003-07-01' 
你把cast去掉也可以的
但cast没有''可不行
比如cast(2003-01-01)as datetime 这是不合语法结构的.

解决方案 »

  1.   

    首先说一下你的第二个 dim Recordset1_str 应为 dim Recordset1_str2吧!
    假如你不加的话就会出现如cast(2000-01-01 as datetime)看看还能显示什么!
    加上cast('2000-01-01' as datetime) 看显示的是什么!
      

  2.   

    你在查询分析器中执行一下:select cast(2000-01-01 as datetime) 与select cast('2000-01-01' as datetime)看一下!
      

  3.   

    select cast('2000-01-01' as datetime)
    2000-01-01 00:00:00.000
    select cast(2000-01-01 as datetime)
    1905-06-22 00:00:00.000
    呵呵~~~,我是给hjb111(苦行僧)打杂的。
      

  4.   

    我当然知道select cast('2000-01-01' as datetime),我要问的是cast能这样用吗cast('Recordset1_str2'as datetime),Recordset1_str2是变量呀,加上'',不就当作是一个字符串常量吗?所以想不明白。继续问。
      

  5.   

    其实问题很简单嘛,虽然Recordset1__str,Recordset1__str2都为变量但这是在你的程序中定义的,在你处理的时候,你没有(也不能)将它做为变量传过去,只是传递了它的值过去,所以当然要加上''啦
      

  6.   

    你打印这句看看结果就很清楚了."SELECT DHHM, SLRQ, XFRQ, ZJMC  FROM dbo.TDLS  WHERE SLRQ>=cast('" + Replace(Recordset1__str, "'", "''") + "' as datetime) and slrq<=cast('" + Replace(Recordset1__str2, "'", "''") + "' as datetime) and substring(ZJDM,1,2)=substring('" + Replace(Recordset1__str3, "'", "''") + "',1,2)"
      

  7.   

    因为:
    Replace(Recordset1__str, "'", "''")传递到处理过程中的是经过处理的最终结果而不是传递过去后再处理的
      

  8.   

    对于变量,必须划分界限的是:
    程序中的变量和数据库(SQL SERVER)中的变量程序中的变量是在你的程序中定义的,也只能在你的程序中使用的.数据库中定义的变量,是在数据库中定义的,也只能在你的数据库中使用的.在程序和数据库中交换的数据,只能是按值传递的,不可能传递变量地址.
    所以,在程序中执行SQL语句,调用存储过程,函数,我们能传递的参数,只能是具体的值,不能是某个变量的地址.举个例子:
    程序中定义了字符变量:m_name  并赋值为'张三'
    在程序中要执行查询,查询<姓名>为'张三'的记录
    正确的查询语句写法是:"select * from 表 where name='" & m_name & "'"
    当你执行查询的时候,SQL 服务收到的查询请求为"select * from 表 where name='张三'"
    所以可以正确.错误的查询语句写法是:"select * from 表 where name=m_name"
    在这种写法下,SQL 服务收到的查询请求为"select * from 表 where name=m_name"
    这时候,SQL 服务器就会去找 m_name ,但因为程序和SQL SERVER都是独立执行的,SQL 不可能到你的程序中去找 m_name,所以会找不到,就提示出错.