2009-12-10 53 views
3

我有一个查询需要将一个值与多个列进行比较,并且只返回一个结果。当它试图将一个字符串参数转换为一个整数时,我总是收到一个转换错误,但是我一直无法找到避免这种情况的好方法。SQL搜索多个字段,返回一个

SELECT DISTINCT 
    CASE 
    WHEN table_one.integer_col = CAST('argument%' AS int) 
     THEN table_one.integer_col 
    WHEN table_one.varchar_col LIKE 'argument%' 
     THEN table_one.varchar_col 
    WHEN table_two.varchar_col LIKE 'argument%' 
    END 
    FROM table_one 
    INNER JOIN table_two 
    ON table_one.pk=table_two.fk 
    WHERE 
    table_one.integer_col = CAST('argument%' AS int) 
    table_one.varchar_col LIKE 'argument%' OR 
    table_two.varchar_col LIKE 'argument%' 

这工作时“的说法%”能够成功地转换为整数,但是当它不能查询炸弹。

+0

你为什么要对一个整数做一个LIKE查询? – RichardOD 2009-12-10 16:16:35

+0

对不起,打字太快...编辑了问题。 – 2009-12-10 16:21:35

回答

3

将整数转换或转换为varchar数据类型如何? 而不是将您的varchar搜索参数转换为int以匹配int列,请将您的int列转换为varchar。

下面是一个简单的例子。

DECLARE @Table TABLE 
(
someInt  int 
) 

INSERT INTO @Table (SomeInt) 
    SELECT 1234567 UNION ALL 
    SELECT 98765 UNION ALL 
    SELECT 24680 UNION ALL 
    SELECT 13579 UNION ALL 
    SELECT 963852 UNION ALL 
    SELECT 147258 




SELECT * 
    FROM @Table 
    WHERE CAST(SomeInt AS varchar(10)) LIKE '1%' 

---- Results 
1234567 
13579 
147258 
+0

我不知道我怎么没有想到...谢谢! – 2009-12-12 12:50:34

2
SELECT DISTINCT 
    CASE 
    WHEN CAST(table_one.integer_col AS VARCHAR(MAX)) LIKE 'argument%' 
     THEN table_one.integer_col 
    WHEN table_one.varchar_col LIKE 'argument%' 
     THEN table_one.varchar_col 
    WHEN table_two.varchar_col LIKE 'argument%' 
    END 
    FROM table_one 
    INNER JOIN table_two 
    ON table_one.pk=table_two.fk 
    WHERE 
    CAST(table_one.integer_col AS VARCHAR(MAX)) LIKE 'argument%' OR 
    table_one.varchar_col LIKE 'argument%' OR 
    table_two.varchar_col LIKE 'argument%'