SQL для поиска строки в select - PullRequest
       3

SQL для поиска строки в select

3 голосов
/ 08 февраля 2011

У меня есть оператор выбора, подобный следующему:

SELECT ColumnA,
CASE ColumnB = 'England' THEN ...

В части после оператора THEN я хочу взять числа из ColumnC,

например, значение ColumnC = ABC 123 DEFи мне нужна часть '123'.

Кто-нибудь знает SQL-код, который я могу использовать, чтобы сделать это внутри выбора, когда «123» всегда будет находиться между только двумя пробелами в строке?(MS SQL)

Ответы [ 3 ]

3 голосов
/ 08 февраля 2011

Главный ключ заключается в том, что вам нужно использовать ColumnC LIKE '% % %', чтобы он не работал, когда данные не содержат двух пробелов.

Если ваши номера будут длиной менее 20 символов, вы можете использовать это

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
   RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....

Или вы можете использовать это

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
    SUBSTRING(
        SUBSTRING(
            ColumnC,
            1,
            CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
        1+CHARINDEX(' ', ColumnC),
        LEN(ColumnC))
ELSE ....
2 голосов
/ 08 февраля 2011

Вы можете использовать комбинацию CHARINDEX и SUBSTRING:

DECLARE @Test TABLE(ColumnC varchar(100))
INSERT @Test 
VALUES ('ABC 123 DEF')

SELECT SUBSTRING(ColumnC,
          CHARINDEX(' ', ColumnC) + 1, -- first space
          CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
             - CHARINDEX(' ', ColumnC)) -- length from first to second space 
FROM @Test

Работает, как и ожидалось, для предоставленной строки образца.

0 голосов
/ 08 февраля 2011
SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...