如何搜索列值

时间:2011-12-13 08:23:21

标签: sql sql-server sql-server-2000

表1

Values

9A 200x400x600
10B 400x200x500
....

值列数据类型为nvarchar

查询

Select * from table1 where values like '" & textbox1.text & "%'

以上查询有效,但我想以4种方式搜索

我想每3位数搜索一列

查询不应检查列中的spacex值。

预期产出

  • 如果我输入textbox1 9A或10A,则查询应返回前2或3个值
  • 如果我输入textbox2 200或400,则查询应从第一行返回200或从第二行返回400
  • 如果我输入textbox3 400或200,则查询应从第一行返回400或从第二行返回200
  • 如果我输入textbox4 600或500,则查询应从第一行返回600,从第二行返回500

如何拆分搜索列值

需要查询帮助

3 个答案:

答案 0 :(得分:1)

如你所知,查询是一个问题有点困惑。我会尝试,如果您正在寻找的话,请告诉我。

我认为:

9A 200x400x600  -> 200x400x600 are de 3*2+2 lasts characters.
10B 400x200x500 -> CHARINDEX(' ', value ) = 4

然后,查询是:

Select 
     * 
from table1 
where 
   substring( values, 1, CHARINDEX(' ', value ) ) = '" & textbox1.text & "' OR
   substring( right( value, 3*2+2), 1, 3 ) = '" & textbox2.text & "' OR
   substring( right( value, 3*2+2), 5, 3 ) = '" & textbox3.text & "' OR
   substring( right( value, 3*2+2), 9, 3 ) = '" & textbox4.text & "' 

<强>编辑:

select * from
   (Select 
     substring( values, 1, CHARINDEX(' ', value ) ) as split1,
     substring( right( value, 3*2+2), 1, 3 ) as split2,
     substring( right( value, 3*2+2), 5, 3 ) as split3,
     substring( right( value, 3*2+2), 9, 3 ) as split4,
     * 
   from table1 ) SplitedTable
where 
   SplitedTable.split1 = '" & textbox1.text & "' OR
   SplitedTable.split2 = '" & textbox2.text & "' OR
   SplitedTable.split3 = '" & textbox3.text & "' OR
   SplitedTable.split4 = '" & textbox4.text & "' 

答案 1 :(得分:1)

请查看数据库规范化,尤其是first normal form

目前,您的数据字段values用于在一行中保存多个不同的值 - 例如。 9A 200x400x600。 (不仅如此,您还在同一个字段中使用不同的值分隔符,因为x都用于分隔字段。)

SQL不是为这种操作而设计的。

虽然可以生成一个返回相关值的查询,但这样的查询会很笨拙且不灵活。因此,我建议对数据结构进行规范化,以便更适合查询。

答案 2 :(得分:0)

Select " & textbox1.text & " as mYSearch,* 
from table1 
where values like '%" & textbox1.text & "%'