SQL select语句 - 返回以可变长度字符串开头的记录

时间:2010-05-27 16:33:42

标签: asp.net sql

我使用字母排序功能,需要一个SQL语句来返回以可变长度字符串开头的记录。但是,如果字符串中的任何字符之间存在句点,空格或短划线,则还需要返回记录。

例如,传入的值可能是“M”(简单)。或“MA”(在这种情况下,它需要返回以“MA”,“M.A”,“M A”和“M-A”开头的记录)。或“MAA”,等等。

这是我到目前为止的陈述:

"SELECT * from table where LEFT(name," + value.Length + ")='" + value + "'"

但我无法弄清楚如何在name中有句号,空格或短划线的情况下返回结果。任何构建声明的帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

看起来像正则表达式的工作。您可以通过返回一些匹配的记录并在ASP.NET中使用Regex来实现。 LINQ ...或更高效,您可以将它应用于您的SQL语句。

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

答案 1 :(得分:1)

如果您使用MS SQL Server,则可以使用替换功能,如果您有一组合理有限的“特殊”字符。你会破坏索引的使用,但无论如何你都可能会这样做。例如:

SELECT
    name,
    i_will,
    never_use,
    select_star
FROM
    My_Table MT
WHERE
   REPLACE(REPLACE(REPLACE(name, '.', ''), ' ', ''), '-', '') LIKE @prefix + '%'

正如您所看到的,当您添加“_”,“(”,“)”等时,声明会很快变得笨拙......