0

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

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

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

这实际上是相同的数字。

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

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

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

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

有没有更好的办法?

4

2 回答 2

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
于 2013-01-26T14:40:05.210 回答
0

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

高温高压

韦德

于 2013-01-26T14:50:15.817 回答