尝试比较两个日期时出错

时间:2013-02-25 21:10:52

标签: sql sql-server tsql

我有一个选择,我需要确保我的adate varchar(8)介于提供的两个日期之间。

有时传入的值为NULL,因此我会显示所有内容。

select something from myTable where
convert(date, adate) >= ISNULL(convert(date,@beginDate), convert(date, adate)) 

工作正常

但是当我做到的时候:

select something from myTable where
convert(date, adate) >= ISNULL(convert(date,@beginDate), convert(date, adate)) 
and convert(date, adate) <= ISNULL(convert(date,@endDate), convert(date, adate))

我得到:

从字符串转换日期和/或时间时转换失败。

或者我可以在没有错误的情况下执行&lt; = line而不使用&gt; =但是不能将它们放在一起,这是怎么回事?

两条线看起来完全相同,我无法弄清楚我在这里做错了什么......

3 个答案:

答案 0 :(得分:1)

检查@endDate的值。该参数是您工作的SELECT和不工作的SELECT之间的唯一区别。有可能,它(有时)包含一个无法转换为日期的值。通常的怀疑是空字符串(''

答案 1 :(得分:1)

它看起来@startdate和@enddate都是字符串类型。最好的方法是让它们采用ISO格式(yyyymmdd),你应该没问题。

例如尝试使用这些;

Select @startdate = '20130101', @enddate = '20130221'

答案 2 :(得分:0)

我不确定你要做什么,但...... 由于任何值都可以来自NULIFIED,你说你会得到表中的所有结果......所以设置查询以便在DB之前使用的语言上过滤它可能会更容易...... < / p>

或者正如我将用PHP样本......

    IF ( !$beginDate || !$endDate )
    {
        $query = "SELECT * FROM myTable";
    }
    ELSE
    {
        $query = "SELECT * FROM myTable WHERE 'whatever clause'";
    }