2011-03-22 119 views
1

有人能帮助我得到这个SQL查询下来的语法?我不是很有经验,也不知道如何去做。这是我到目前为止。帮助SQL查询

SELECT ... WHERE (@MyVariable IS NULL OR [MyVariable] <= (CAST(@MyVariable as NUMERIC))) 

我真正需要的是能够选择的所有行[MyVariable的]是< = @MyVariable但也有2个文本选择MyVariable的可能是在这种情况下,它应该始终选择行。你如何做到这一点,而不会出现铸造错误?

+0

一些样本数据可能会帮助 – Gratzy 2011-03-22 16:09:16

+0

我不知道我收到你的问题:表中的[MyVariable]列是什么类型? – 2011-03-22 16:09:56

+0

它是一个nvarchar。该列中的数据将始终为1,2,3,4,TEXT1,TEXT2。在选择查询,如果该列中的值是行应该被选择<= @MyVariable或者如果@MyVariable或者是文本的选项。我知道有点混乱。 – novacara 2011-03-22 16:14:13

回答

2

我认为你需要做一对夫妇的扭曲得到它的工作..但我认为使用ISNUMERIC结合case语句就可以了:

SELECT ... WHERE 
@MyVariable IS NULL OR 
ISNUMERIC(@MyVariable) = 0 OR 
[MyVariable] < CASE 
       WHEN IsNumeric(@MyVariable) = 1 
        THEN CAST(@MyVariable as NUMERIC) 
       ELSE 0 -- if you have negatives in your db go to max negative 
      END 
+0

我会给它一个镜头,让你知道! – novacara 2011-03-22 16:27:09

+0

@novacara:你没有说你正在使用什么DBMS,但是请注意,IsNumeric适用于SQL Server,但不适用于(AFAIK)适用于MySQL – 2011-03-22 16:40:31

+0

噢对不起,我正在使用SQL Server – novacara 2011-03-22 16:47:14