Отделение числовых значений от строки - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблема, из-за которой мне нужно отделить следующие BPO007, чтобы показать BPO и 007.В некоторых случаях другим примером будет GFE0035, при этом мне все еще нужно будет отделить числовое значение от символов.

Когда я делаю следующее select isnumeric('BPO007'), результат равен 0, что правильно, однако яЯ не уверен, как отделить их друг от друга.

Я смотрел на эту ссылку , но на самом деле это не отвечает на мой вопрос.

Мне нужновышеприведенное разделение для отдельной цели проверки в моем триггере.

Как бы я разработал что-то подобное?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Поскольку число и текст различаются, вы можете использовать следующие коды

DECLARE @NUMERIC TABLE (Col VARCHAR(50))
INSERT INTO @NUMERIC VALUES('BPO007'),('GFE0035'),('GFEGVT003509'),('GFEMTS10035')

SELECT
Col,
LEFT(Col,LEN(Col)-LEN(SUBSTRING(Col,PATINDEX('%[0-9]%',Col),DATALENGTH(Col)))) AS TEXTs,
RIGHT(Col,LEN(Col)-LEN(LEFT(Col,LEN(Col)-LEN(SUBSTRING(Col,PATINDEX('%[0-9]%',Col),DATALENGTH(Col)))))) AS NUMERICs

FROM @NUMERIC
0 голосов
/ 27 сентября 2018

Как сказано в комментарии ранее:

О вашем вопросе Как бы я разработал что-то подобное? :
Не храните две части информации в одном столбце (прочитайтео 1.NF ).Вы должны хранить отдельные столбцы в вашей базе данных для BPO и для 007 (или, скорее, целое число 7 ).
Затем используйте некоторые строковые методы для вычисления BPO007 когда вам это нужно на выходе.

Только чтобы не оставить вас в одиночестве под дождем.

DECLARE @tbl TABLE(YourColumn VARCHAR(100));
INSERT INTO @tbl VALUES('BPO007'),('GFE0035');

SELECT YourColumn,pos
      ,LEFT(YourColumn,pos) AS CharPart
      ,CAST(SUBSTRING(YourColumn,pos+1,1000) AS INT) AS NumPart
FROM @tbl 
CROSS APPLY(SELECT PATINDEX('%[0-9]%',YourColumn)-1) AS A(pos);

Вернется

YourColumn  pos CharPart    NumPart
BPO007      3   BPO         7
GFE0035     3   GFE         35

Подсказка: я использую CROSS APPLY здесь, чтобы вычислить позицию первого числового символа, а затем использую pos в реальном запросе, как если бы вы использовали переменную.В противном случае PATINDEX пришлось бы повторить ...

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