SQL Server 2005 - извлечение только альфа-значений из строки - PullRequest
1 голос
/ 01 марта 2010

Я использую SQL Server 2005 и хочу извлечь альфа-часть строки.

т.е.

С ABC123, я хотел бы получить ABC

С AB1234 я бы хотел получить AB. и т. д.

Какой самый простой способ сделать это?

Ответы [ 4 ]

1 голос
/ 05 сентября 2011

Всегда буквы, а затем цифры, т. Е. XYZ123 или XZ321 и т. Д. - GordyII 2 марта 10 в 0: 26

Я знаю, что это старый пост, НО ... Если приведенная выше цитата верна, то это легко ...

 SELECT LEFT(YourStringColumn, PATINDEX('%[0-9]%',YourStringColumn)-1)
   FROM dbo.YourTable
1 голос
/ 01 марта 2010

если между буквой и цифрой всегда есть пробел, попробуйте:

DECLARE @String  varchar(100)
SET @String='ABC 123'

SELECT LEFT(@String,LEN(@String)-CHARINDEX(' ',@String))

OUTPUT

-------------------
ABC

(1 row(s) affected)

РЕДАКТИРОВАТЬ после комментария OP, не предполагает пробела перед цифрами:

DECLARE @String  varchar(100)
SET @String='ABCD123'

;with Numbers AS
(
    SELECT 1 AS Number,ISNUMERIC(SUBSTRING(@String,1,1)) AS Digit
    UNION ALL
    SELECT Number+1,ISNUMERIC(SUBSTRING(@String,Number+1,1)) AS Digit
        FROM Numbers
    WHERE Number<LEN(@String)
)
SELECT LEFT(@String,MAX(Number)) FROM Numbers WHERE Digit=0
--OPTION (MAXRECURSION n)  --if the string is longer than 100 characters uncomment this and set "n" to the string length

ВЫВОД:

-------------------
ABCD

(1 row(s) affected)
1 голос
/ 01 марта 2010

Вы можете создать пользовательскую функцию, которая будет циклически проходить через символы и создавать новую строку, где символы были буквами.

0 голосов
/ 02 марта 2010

Вы также можете рассмотреть возможность сделать это не в SQL, а где-то еще, если это возможно в вашем сценарии. Если вы объясните, с какими данными вы работаете, как они попадают в вашу базу данных sql, и как и как их используют, возможно, можно будет предложить лучшую альтернативу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...