TSQL - 在字符串中查找第一次出现的值

时间:2010-10-22 16:45:48

标签: sql-server-2005 tsql string-math

我需要为名为AddrZip的列运行一个简单的select语句,以显示列中第一个空格后包含“1/2”的所有记录。在Access 2007中,它将是:**Left([Names],InStr(1,[Names]," ")-1),但无法在SQL 2005中找到如何执行此操作。所有帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,查找' '

的记录

CHARINDEX(' ', [AddrZip]) > 0

然后在 '1/2'

之后查找' '发生的记录

CHARINDEX('1/2', [AddrZip], CHARINDEX(' ', [AddrZip])) > 0

SELECT  *
FROM    ( SELECT    *
          FROM      [Addresses]
          WHERE     CHARINDEX(' ', [AddrZip]) > 0
        ) x
WHERE   CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0

这个“简化”版本可以工作:

SELECT  *
FROM    [Addresses]
WHERE   CHARINDEX(' ', [AddrZip]) > 0
        AND CHARINDEX('1/2', [x].[AddrZip], CHARINDEX(' ', [AddrZip])) > 0

如果您希望找到'1/2'出现紧接' ',其中' '是字符串中的第一个空格,那么使用以下代码:

SELECT  *
FROM    [Addresses]
WHERE   CHARINDEX(' ', [AddrZip]) > 0
        AND CHARINDEX(' ', [AddrZip]) = CHARINDEX(' 1/2', [x].[AddrZip])

尽可能避免使用LIKE运算符。众所周知,它们很慢。

答案 1 :(得分:0)

试试这个 -

select * from table where addrZip like '%\ 1/2%' escape '\'