如何修剪每个结果都会改变的字符串

时间:2019-06-26 08:43:17

标签: sql excel openedge progress-db ms-query

我有包含日期​​和批号的数据。我需要能够减少批号,从每一个中删除开头的单词“ Job”。我遇到的问题是每个结果都是不同的,并且长度也不同。

要尝试处理此问题,我尝试使用LEFTCHARINDEX对其进行修整,但返回语法错误。由于我在开放式边缘v10进度odbc数据库上使用MS Query,因此不清楚问题是什么。下面是我生成的代码。

    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 个答案:

答案 0 :(得分:1)

您要排除最左边的4个字符(“作业”)。这与显示最右边的x个字符相同,其中x =字符串长度-4。我对Progress的SQL变体不是那么熟悉,但是类似:

Right(DelBatchNumber, Len(DelBatchNumber) - 4)

会这样做。您可能需要用“ Right”和“ Len”代替“ Progress”,并可能检查“ Right Take”参数的顺序。

答案 1 :(得分:0)

尝试

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

输出

'321924'

第一个参数是您要更改的字符串, 第二个参数是您要替换的字符串, 第三个参数是您要替换的字符串。

所以在这里,我只是用一个空字符串替换了'Job'

请注意,它返回的是字符串而不是整数,如果要将结果作为整数,则可能需要使用CONVERT / CAST

答案 2 :(得分:0)

您可以尝试使用这种方法,尝试用空字符串替换'Job'字符串:

 SELECT 
      Delivery_0.DelProposedDate
    , Delivery_0.DelBatchNumber
    , REPLACE(Delivery_0.DelBatchNumber,'Job ','')  as 'JobID'
FROM SBS.PUB.Delivery Delivery_0

答案 3 :(得分:0)

SQL Server具有明确执行此操作的功能,STUFF()

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

这将用空字符串替换前四个字符。