Как обрезать строку, которая меняется при каждом результате - PullRequest
0 голосов
/ 26 июня 2019

У меня есть данные, которые содержат дату и номер партии.Мне нужно иметь возможность урезать номер партии, удалив из каждого из них ведущее слово «Работа».У меня проблема в том, что каждый результат отличается и имеет разную длину.

Чтобы попытаться справиться с этим, я попытался использовать LEFT и CHARINDEX, чтобы обрезать его, но получить обратно синтаксическую ошибку,Поскольку я использую MS Query для базы данных odbc progress с открытым фронтом v10, неясно, в чем проблема.Ниже приведен код, который я произвел.

    SELECT 

      Delivery_0.DelProposedDate
    , Delivery_0.DelBatchNumber
    , LEFT(Delivery_0.DelBatchNumber,CHARINDEX(' ',Delivery_0.DelBatchNumber)-1) as 'JobID'

FROM SBS.PUB.Delivery Delivery_0

В настоящее время данные выглядят так:

DelProposedDate               DelBatchNumber
05/05/2017                    Job 321924
08/02/2019                    Job 356812/4
29/03/2017                    Job 328585

Я пытаюсь заставить их выглядеть так:

DelProposedDate               DelBatchNumber             JobID
05/05/2017                     Job 321924                321924
08/02/2019                     Job 356812/4              356812/4
29/03/2017                     Job 328585                328585

Ответы [ 4 ]

1 голос
/ 26 июня 2019

SQL Server имеет функцию, которая делает это явно, STUFF():

select stuff(Delivery_0.DelBatchNumber, 1, 4, '')

Это заменяет первые четыре символа пустой строкой.

1 голос
/ 26 июня 2019

Вы хотите исключить самые левые 4 символа («Работа»).Это тот же самый пример, показывающий крайние справа символы x, где x = длина строки - 4. Я не настолько знаком с вариантом SQL Progress, но что-то вроде:

Right(DelBatchNumber, Len(DelBatchNumber) - 4)

будетсделай это.Возможно, вам придется заменить Progress-эквивалент Right и Len и, возможно, проверить порядок параметров, которые принимает Right.

0 голосов
/ 26 июня 2019

Вы можете попробовать это, пытаясь заменить строку 'Job' пустой строкой:

 SELECT 
      Delivery_0.DelProposedDate
    , Delivery_0.DelBatchNumber
    , REPLACE(Delivery_0.DelBatchNumber,'Job ','')  as 'JobID'
FROM SBS.PUB.Delivery Delivery_0
0 голосов
/ 26 июня 2019

try

select replace ('Job 321924','Job ','') 

output

'321924'

первый параметр - строка, которую вы хотите изменить, второй параметр - строка, которую вы хотите заменить, третий параметр - строка, которую вы хотитезаменить на.

Так что здесь я просто заменил 'Job' пустой строкой

Обратите внимание, что она возвращает строку, а не целое число, вам может понадобиться использовать CONVERT / CAST, если вы хотитерезультат в виде целого числа

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