如何 trim 一个在每个结果都会改变的字符串

How to trim a string which changes at each result

我有包含日期​​和批号的数据。我需要能够 trim 从每个批号中删除前导词 "Job "。我遇到的问题是每个结果都不同,长度也不同。

为了尝试解决这个问题,我尝试使用 LEFTCHARINDEX 来 trim 但返回语法错误。因为我在开放边缘 v10 progress 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

尝试

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

输出

'321924'

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

所以我在这里简单地用一个空字符串

替换了 'Job '

请注意,它 returns 是一个字符串而不是一个整数,如果您希望结果为整数,您可能需要使用 CONVERT/CAST

您想排除 left-most 4 个字符 ('Job ')。这与显示 right-most x 字符相同,其中 x = length-of-string - 4。我不太熟悉 Progress 的 SQL 变体,但类似于:

Right(DelBatchNumber, Len(DelBatchNumber) - 4)

会做的。您可能需要替换 Right 和 Len 的 Progress 等价物,并可能检查 Right 参数的顺序。

你可以试试这个,它会尝试用空字符串替换 'Job ' 字符串:

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

SQL 服务器有一个函数明确地执行此操作,STUFF():

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

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