代码之家  ›  专栏  ›  技术社区  ›  Marks

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

  •  1
  • Marks  · 技术社区  · 15 年前

    我有一个搜索框,你可以输入纯文本。关键字之间用空格隔开。

    我用的是

    SELECT * FROM Tbl
    WHERE NOT EXISTS(
        SELECT * FROM @SearchItems WHERE NOT( 
        name LIKE SItem OR
        description LIKE SItem OR
        field3 LIKE SItem)
    )
    

    这将搜索不存在搜索项但未找到的条目->也就是说,它只显示项目,在任何字段中都可以找到所有searchitems。我使用这两个'NOT's,因为否则我将不得不检查count of found items=count of all items。

    但是现在我对日期有个问题。因为10/05/05是一个日期,但也可能是描述中的一个数字。所以我想得到所有项目,其中有一个10/05/05在一个正常的领域,或日期匹配的具体日期。

    AND NOT EXISTS(
        SELECT * FROM @DateItems WHERE NOT(
        date = DItem)
    )
    

    这意味着,项目需要有10/05/05作为字符串在一个字段和日期,但如果我使用或,这意味着所有项目与正确的日期将显示,而不管其他关键字。如果我从'all keywords'中删除'date keywords',它将在描述中找不到字符串。

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

    编辑: 我忘了提一下:在“all keywords”数组中,日期是原始格式的,比如“10/05/05”。实现为日期的关键字以ISO格式“2005-05-10”存储在“日期关键字”数组中。所以我不能这样做 WHERE DItem = date OR description like DItem .

    谢谢你的帮助。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Marks    15 年前

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

    或它们之间的关系: WHERE Date = DateItem OR Field = StrItem .

    推荐文章