【问题标题】:Function to find the Exact match in Microsoft SQL Server在 Microsoft SQL Server 中查找完全匹配的函数
【发布时间】:2009-04-10 19:51:56
【问题描述】:

在 Microsoft SQL server 中,如何在给定字符串中找到完全匹配的子字符串?

例如,在字符串'0000020354'中,我想找到'20354'。当然,它必须是完全匹配的。我尝试使用 CHARINDEX(@providerId, external_prv_id) > -1,但 CHARINDEX 的问题是它在找到第一个匹配项后立即给我索引。

基本上我在 Microsoft SQL SERVER 中寻找类似 indexOf("") 的函数。

【问题讨论】:

  • 你的意思是在“0000020354”中找到“2035”(不是“2034”)吗?您可能想要编辑问题。

标签: sql-server


【解决方案1】:

假设@ProviderIdVARCHAR

你可以使用LIKE

SELECT Id FROM TableName WHERE Column LIKE '%' + @ProviderId + '%'

这将返回 Column 包含 2034 的行。

如果你不想使用LIKE,你可以使用PATINDEX

SELECT Id FROM TableName WHERE PATINDEX('%' + @ProviderId + '%', Column) > 0

它返回它找到的任何匹配的起始位置。

【讨论】:

  • 这个值总是动态的。我不知道提前的价值
  • 这个数字只是一个例子
  • 您的问题令人困惑,但我认为 PATINDEX 是您想要的。将 2034 年肖恩的作品参数化没有问题。将其插入上面使用 CHARINDEX 的位置。
【解决方案2】:

您存储的数据是什么?听起来另一种存储类型(例如单独的表)可能更合适。


啊,2034 是一个错字。我从你的问题中不明白的是你说你需要完全匹配。如果 CHARINDEX 为“20354”返回非零值,则您知道它匹配“20354”。如果您不知道 @providerId 是什么,请在查询中将其与 CHARINDEX 的结果一起返回。同样,如果您想要external_prv_id,请包含它,例如:

SELECT external_prv_id, CHARINDEX(@providerId, external_prv_id)
       WHERE CHARINDEX(@providerId, external_prv_id) > 0

(请注意,返回 0 的 CHARINDEX 表示它没有找到。)

如果您实际上是指“20354”可以包含通配符,则需要 PATINDEX。

【讨论】:

    【解决方案3】:

    LIKE %VAL% 内容过于宽泛,例如数据库包含 00000012345 并且您搜索 1234 您将拉出这一行,这是 OP 不想要的(如果我正确理解“EXACT”部分的话)。

    您想要的是一个正则表达式,它执行以下操作:任意数量的零后跟匹配项和行尾。

    从这个问题我们知道如何修剪前导零: Better techniques for trimming leading zeros in SQL Server?

    SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col))
    

    因此,将其与您的查询结合起来,您可以执行以下操作:

    WHERE SUBSTRING(external_prv_id, PATINDEX('%[^0]%', external_prv_id+'.'), LEN(external_prv_id)) = '12345'
    

    当然,更好的(最好的?)解决方案是将它们存储为 INTEGERS,这样您就可以获得完全的可索引性,而不必为所有这些废话而烦恼。如果您真的需要存储确切的字符串,那么您有几个选择:

    • 存储归一化整数结果 在另一列中并将其用于 所有内部查询
    • 总是存储一个整数,然后填充 查询时为零(我的投票)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多