获得句子中的单词长度

时间:2015-10-05 20:42:32

标签: sql-server tsql

我们的数据库中存储了大量的商业名称。我们的一些客户在名称中输入了SSN。我正在尝试获取所有这些商业名称

问题:

查找NAME中每个单词的长度,并返回长度为9或11的任何人

示例:

  1. 测试123456789 test2 - 这应该显示在结果中

  2. 测试123456 test2 ---这不应该出现

  3. 测试123456789 test2 12345678911 - 这应该显示

  4. 应该返回字符串中的任何单词(数字或字母或两者的组合)9或11 ..谢谢你

1 个答案:

答案 0 :(得分:3)

你可以使用LIKE。在列名称之前或之后忽略任何内容的百分号,空格以确保前后有空格,然后搜索数值的范围。

SELECT
  *
FROM
  Table
WHERE
  Name LIKE '% [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] %'
  OR Name LIKE '% [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] %'

编辑:

实际上,重读初始问题,看起来你不是只寻找9或11的数字字符串,而是查找所有字符串。在那种情况下,@ JoeMalpass可能比我想的更合适。

SELECT
  *
FROM
  Table
WHERE
  --Surrounded by spaces
  Name LIKE '% [^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ] %'
  OR Name LIKE '% [^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ] %'
  --At the beginning with extra information after
  OR Name LIKE '[^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ] %'
  OR Name LIKE '[^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ] %'
  --At the beginning with extra information before
  OR Name LIKE '% [^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ]'
  OR Name LIKE '% [^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ]'
  --The entire column
  OR Name LIKE '[^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ]'
  OR Name LIKE '[^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ][^ ]'