如何 trim 一个在每个结果都会改变的字符串
How to trim a string which changes at each result
我有包含日期和批号的数据。我需要能够 trim 从每个批号中删除前导词 "Job "。我遇到的问题是每个结果都不同,长度也不同。
为了尝试解决这个问题,我尝试使用 LEFT
和 CHARINDEX
来 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, '')
这会将前四个字符替换为空字符串。
我有包含日期和批号的数据。我需要能够 trim 从每个批号中删除前导词 "Job "。我遇到的问题是每个结果都不同,长度也不同。
为了尝试解决这个问题,我尝试使用 LEFT
和 CHARINDEX
来 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, '')
这会将前四个字符替换为空字符串。