【问题标题】:Ignore All Spaces when using DataTable.Select()使用 DataTable.Select() 时忽略所有空格
【发布时间】:2013-01-26 14:20:07
【问题描述】:

我需要根据电话号码从数据表中进行选择。问题是电话号码中可能有空格,但不一定一致。

例如,数据表中的电话号码可以是以下任何一种 -

01234 123 123
01234 123123
01234123123
0123 412 3123
0123 4123 123

其实都是同一个数字。

我可以标准化搜索字符串并从中删除空格,但是如何搜索“01234123123”以匹配实际包含“0123 412 3123”或任何其他变体的列?

DataTable.Select("phoneNumber LIKE '" + searchString + "%'")

只有当数字完全匹配时才会返回该行。

我曾想过循环并生成 searchString 的许多变体,在所有可能的地方都有空格,然后搜索所有这些变体,但这似乎非常耗费资源......

有没有更好的办法?

【问题讨论】:

    标签: vb.net visual-studio-2010 select datatable whitespace


    【解决方案1】:

    您可以使用 Linq 并删除所有空格,例如:

    Dim phoneNumber = "01234 123   123"
    Dim trimmedNumber = phoneNumber.Replace(" ", "")
    Dim filtered = From row In DataTable
                   Let trimmed = row.Field(Of String)("phoneNumber").Replace(" ", "")
                   Where trimmed = trimmedNumber
    

    【讨论】:

      【解决方案2】:

      显然,正如 Tim 所展示的那样,有一种方法可以获取您想要的信息,但您应该考虑修复数据,这样您就不需要解决方法了。您应该通过删除所有空格或确保它们在同一个地方有空格来修复数据,使其符合相同的模式。修复数据库上的数据很容易,只需使用更新语句替换所有空格,然后如果需要,可以使用字符串操作使所有数字匹配。困难的部分是,如果可以的话,您将需要返回任何代码,并确保插入或更新电话号码的代码不会使其进入错误状态。我和这里的任何人一样对使用创可贴解决方案感到内疚,但通常情况下,你正在为自己制造未来的头痛。

      HTH

      韦德

      【讨论】:

      • 我完全同意您的观点,但不幸的是,数据来自可以由任意数量的人填写的电子表格。如果我有办法,我会用数据库替换它,但“它总是在电子表格中”(!)。
      • 在这种情况下,我会使用 access 或其他一些轻量级数据库将电子表格导入其中,然后处理数据。如果这不可能,您可以使用 vba 或 Excel 的其他内置功能来防止用户输入不正确的数据。 Excel 2010 具有验证用户输入的功能(不确定其他版本)。
      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2010-09-19
      • 2013-04-28
      相关资源
      最近更新 更多