Получение первых n числовых символов из столбца varchar в SQL - PullRequest
1 голос
/ 22 января 2010

Я строю хэш, используя номер дома из поля адреса. Какой SQL можно использовать для выбора только числовых символов в начале поля varchar?

EX:

12345 South 1st Street

Я хочу 12345. Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 22 января 2010
declare @MyColumn as varchar(250)
set @MyColumn = '12345 South 1st Street'
select @MyColumn, cast(left(@MyColumn, patindex('%[^0-9]%', @MyColumn)) as int)

Если вы точно не знаете, что число будет определенным, добавьте оператор CASE следующим образом, чтобы избежать ошибок:

declare @MyColumn as varchar(250)
set @MyColumn = 'South 1st Street'
select @MyColumn as Address, case when patindex('%[^0-9]%', @MyColumn) = 1 then '' else left(@MyColumn, patindex('%[^0-9]%', @MyColumn)) end as StreetNumber

Если могут быть начальные пробелы, вы также можете добавить LTRIM:

declare @MyColumn as varchar(250)
set @MyColumn = ' 12345 South 1st Street'
select @MyColumn as Address, case when patindex('%[^0-9]%', ltrim(@MyColumn)) = 1 then '' else left(ltrim(@MyColumn), patindex('%[^0-9]%', ltrim(@MyColumn))) end as StreetNumber
0 голосов
/ 22 января 2010
SELECT LEFT(address, INSTR(address, ' ') - 1) FROM address_table

Находит позицию первого пробела и берет текст слева от него.

0 голосов
/ 22 января 2010
DECLARE @TestVal VARCHAR(100)
SET @TestVal = '12345 South 1st Street'

SELECT 
    CASE 
        WHEN @TestVal LIKE '% %' THEN LEFT(@TestVal , CHARINDEX(' ', @TestVal ) - 1) 
        ELSE @TestVal 
    END 

Это также будет работать, если значение не содержит пробел или является нулевым.

Если вы хотите ТОЧНО, как вы и просили (только числовые символы в начале строки), попробуйте это. Например, «MyHouseName, SomeStreet» вернется », так как у него нет номера дома. «12A Flat, SomeStreet» вернет «12». Это не звучит идеально, но, как вы сказали «числовые» символы, я расширил эту альтернативу:

DECLARE @TestVal VARCHAR(100)
SET @TestVal = '12345 South 1st Street'

SELECT CASE 
    WHEN @TestVal LIKE '[0-9]%' THEN    
            CASE 
                WHEN @TestVal LIKE '%[^0-9]%' THEN LEFT(@TestVal, PATINDEX('%[^0-9]%', @TestVal) - 1) 
                ELSE @TestVal 
            END
    ELSE '' END
0 голосов
/ 22 января 2010

Предполагаете ли вы, что после числовых символов будет пробел и что всегда будут числовые символы?

DECLARE @addr VARCHAR(100)
SET @addr='12345 South 1st St'
SELECT SUBSTRING(@addr,0,CHARINDEX(' ',@addr))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...