Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL搜索,参数可以是日期,也可以是字符串_Sql_Search_Date - Fatal编程技术网

SQL搜索,参数可以是日期,也可以是字符串

SQL搜索,参数可以是日期,也可以是字符串,sql,search,date,Sql,Search,Date,我有一个搜索框,您可以在其中输入纯文本。关键字用空格分隔。 我检查每个关键字是否符合日期格式,并将“所有关键字”存储在一个数组中,将“日期关键字”存储在另一个数组中。所有的“日期关键字”也都在“所有关键字”数组中,因为我不知道它是“仅”一个日期还是一个描述或名称。我搜索了许多领域,如名称、描述等 我用的是 SELECT * FROM Tbl WHERE NOT EXISTS( SELECT * FROM @SearchItems WHERE NOT( name LIKE SIt

我有一个搜索框,您可以在其中输入纯文本。关键字用空格分隔。 我检查每个关键字是否符合日期格式,并将“所有关键字”存储在一个数组中,将“日期关键字”存储在另一个数组中。所有的“日期关键字”也都在“所有关键字”数组中,因为我不知道它是“仅”一个日期还是一个描述或名称。我搜索了许多领域,如名称、描述等

我用的是

SELECT * FROM Tbl
WHERE NOT EXISTS(
    SELECT * FROM @SearchItems WHERE NOT( 
    name LIKE SItem OR
    description LIKE SItem OR
    field3 LIKE SItem)
)
这将搜索不存在searchitems且未找到的条目->意味着,它仅显示条目,其中所有searchitems都在任何字段中找到。我使用这两个'NOT',因为否则我必须检查找到的项目的计数是否=所有项目的计数

但是现在我对日期有个问题。因为10/05/05是一个日期,但也可以是描述中的数字。因此,我想获取所有项目,其中一个正常字段中有10/05/05,或者日期与特定日期匹配

但是如果我加上像

AND NOT EXISTS(
    SELECT * FROM @DateItems WHERE NOT(
    date = DItem)
)
这意味着,项目需要在字段中以10/05/05作为字符串和日期,但如果我使用或,则意味着将显示所有具有正确日期的项目,而不考虑其他关键字。如果我从“所有关键字”中删除“日期关键字”,则在描述中找不到该字符串

如何解决这个问题?当我输入'10/05/05'时,我想获取日期或描述中的日期的所有项目,但如果我输入'10/05/05'蓝色必须在其中一个字段中,10/05/05可能在正常字段或日期中

编辑:我忘了提到:在“所有关键字”数组中,日期是原始格式的,如“10/05/05”。实现为日期的关键字以ISO格式“2005-05-10”存储在“日期关键字”数组中。所以我不能做类似于
的事情,其中DItem=date或类似于DItem的描述

由于这有点难以描述,请询问是否有不清楚的地方。
谢谢你的帮助。

我找到了解决办法。因为我花了很长时间才找到这个解决方案,所以我会把它写在这里,也许有人会从中得到帮助

由于可能的日期也应该是常规搜索字符串,因此当找不到此字符串时,搜索将失败。唯一的例外是当字符串的解释日期与项目的日期匹配时(在这种情况下,不需要在某处找到字符串表示)。但要做到这一点,您需要知道哪个“日期关键字”属于哪个“所有关键字”搜索字符串

如果存在此关系,则如果找到字符串表示形式或日期匹配,则可以接受项

现在我将日期及其字符串表示形式加载到一个表中,并有一个简单的 或者它们之间的关系:
其中Date=DateItem或Field=StrItem