Удалите ведущие нули для каждого раздела, разделенного знаком "." Кроме случаев, когда '.0.' - PullRequest
0 голосов
/ 03 августа 2020

В T SQL мне нужно создать сценарий для удаления всех начальных нулей между '.', Начиная с первого 0 в строке ИСКЛЮЧАЯ, когда есть '.0.' в любом месте в середине номера задачи. То, что у меня есть до сих пор, отлично работает, когда номер задачи не имеет EX: 111.0.123.234, но я не могу понять комбинацию SUBSTRING / CHARINDEX / PATINDEX, et c. чтобы удалить все ведущие нули, кроме тех случаев, когда ноль является единственным числом между '.' См. Прилагаемый снимок экрана и сценарий / частичные результаты в качестве примера.

Вот мой сценарий:

SELECT TASKPRODUCTID, (CASE WHEN TASKPRODUCTID NOT LIKE '%.0.%' THEN
REPLACE(LTRIM(REPLACE(TASKPRODUCTID,'0','')),' ','0') ELSE 
SUBSTRING(TASKPRODUCTID, PATINDEX('%[^0 ]%', TASKPRODUCTID + ' '),  LEN(TASKPRODUCTID))
END) AS NewTaskProductID
FROM TASK

Вот частичный набор результатов:

TASKPRODUCTID                        NewTaskProductID
003.007.002.001                      3.7.2.1
003.007.002.003                      3.7.2.3
004.003.003.008.0.2017275.132925     4.003.003.008.0.2017275.132925
004.005.001.003                      4.5.1.3
004.005.004.004.0.2017275.135139     4.005.004.004.0.2017275.135139
004.005.007.005.0.2017275.140304     4.005.007.005.0.2017275.140304
002.001.002                          2.1.2
002.004                              2.4
016.010                              16.1

Снимок экрана Пример начального нуля в выделенных строках все еще имеют ведущие нули в следующем десятичном разделе (ах)

Спасибо !!

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете попробовать использовать STUFF () , чтобы получить .0. в другом случае сценарий

declare @s AS varchar(100) = '0010.0.005.006025'

print stuff(REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*'), 
 patindex('%.*.%',REPLACE(LTRIM(REPLACE(@s,'0','0')),'0','*')), 3,'.-.')

ВЫХОД

**1*.-.**5.**6*25

Теперь рассматривайте это как первый сценарий; единственная разница в том, что у нас есть '*' вместо '0'

...