TSQL - поиск первого вхождения значения в строку - PullRequest
2 голосов
/ 22 октября 2010

Мне нужно выполнить простой оператор выбора для столбца с именем AddrZip, чтобы показать все записи, которые содержат '1/2' после первого пробела в столбце.В Access 2007 это будет:**Left([Names],InStr(1,[Names]," ")-1), но не могу узнать, как это сделать в SQL 2005. Будем благодарны за любую помощь.

Ответы [ 2 ]

1 голос
/ 22 октября 2010

Сначала ищите записи с ' ':

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 операторов, если это вообще возможно. Они общеизвестно медленные.

0 голосов
/ 22 октября 2010

Попробуйте это -

select * from table where addrZip like '%\ 1/2%' escape '\'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...