У меня есть окно поиска, в котором вы можете ввести простой текст. Ключевые слова разделены пробелами. Я проверяю каждое ключевое слово, если оно соответствует формату даты и сохраняет «все ключевые слова» в одном массиве и «ключевые слова даты» в другом. Все «ключевые слова даты» также находятся в массиве «все ключевые слова», поскольку я не могу определить, является ли его «единственной» датой или, возможно, также описанием или именем. Я ищу на протяжении многих областей, как название, описание и т.д. ...SQL Search с параметром, который может быть дата или может быть строкой
я использую что-то вроде
SELECT * FROM Tbl
WHERE NOT EXISTS(
SELECT * FROM @SearchItems WHERE NOT(
name LIKE SItem OR
description LIKE SItem OR
field3 LIKE SItem)
)
Это ищет запись, где не существует searchitems, которые не найдены -> Значит, это только показывает, элементы, где все поисковые теги находятся в любом поле. Я использую эти два «NOT», потому что в противном случае мне нужно было бы проверить, подсчитывается ли количество найденных элементов = количество всех элементов.
Но теперь у меня проблема с датами. Потому что 10/05/05 - это дата, но также может быть числом в описании. Поэтому я хочу получить все элементы, где есть 10/05/05 в одном из нормальных полей, или дата соответствует конкретной дате.
Но если я добавить somehting как
AND NOT EXISTS(
SELECT * FROM @DateItems WHERE NOT(
date = DItem)
)
Это означает, что пункт должен иметь 10/05/05 в виде строки в поле и в качестве даты, но если я использую ИЛИ, это означает, что все элемент с правильным днем будет отображаться независимо от других ключевых слов. Если я удалю «ключевые слова даты» из «all-keywords», он не найдет строку в описании.
Как это исправить? Я хочу получить все элементы с даты или с датой в описании, когда я вхожу в «10/05/05», но если я введу «синий 10/05/05», синий должен находиться в одном из полей и 10/05/05 может быть в обычном поле ИЛИ дате.
Редактировать: Я забыл упомянуть: в массиве «все ключевые слова» даты находятся в оригинальном формате, например «10/05/05». Ключевые слова, реализованные в виде дат, хранятся в массиве «date-keywords» в формате ISO 2005-05-10. Поэтому я не могу сделать что-то вроде WHERE DItem = date OR description like DItem
.
Как это немного сложно описать, пожалуйста, спросите, что-то неясно. Спасибо за любую помощь.