Как искать значения столбца - PullRequest
1 голос
/ 13 декабря 2011

Table1

Values

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

Значения Тип данных столбца: nvarchar

Запрос

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

Приведенный выше запрос работает, но я хочу выполнить поиск 4 способами

Я хочу искать в столбце каждые 3 цифры

Запрос не должен проверять значения space и x из столбца.

Ожидаемый вывод

  • если я наберу textbox1 9A или 10A, запрос должен вернуть первые 2 или 3 значения
  • Если я наберу textbox2 200 или 400, запросдолжен вернуть 200 из первой строки или 400 из второй строки
  • Если я введу textbox3 400 или 200, запрос должен вернуть 400 из первой строки или 200 из второй строки
  • Если я введу textbox4 600или 500 запрос должен вернуть 600 из первой строки и 500 из второй строки

Как разделить значение столбца для поиска

Нужна помощь в запросе

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Пожалуйста, посмотрите на нормализацию базы данных, в частности первая нормальная форма .

В настоящее время ваше поле данных values используется для хранения нескольких разных значений в одной строке, например. 9A 200x400x600. (Не только это, но вы также используете разные разделители значений в одном и том же поле, так как и x используются для разделения полей.)

SQL не предназначен для такого рода манипуляций.

Хотя можно было бы создать запрос, который бы возвращал соответствующие значения, такой запрос был бы громоздким и негибким. Поэтому я предлагаю нормализовать структуру данных, чтобы больше подходить для запросов.

1 голос
/ 13 декабря 2011

Как вы знаете, запрос - вопрос немного запутанный. Я постараюсь, дайте мне знать, если это близко, что вы ищете.

Я предполагаю, что:

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 & "' 
0 голосов
/ 13 декабря 2011
Select " & textbox1.text & " as mYSearch,* 
from table1 
where values like '%" & textbox1.text & "%'
...