1

我有一个包含 varchar 列的表,例如

Reference  Value      Comment 
GLJ:04302    23883.2  'Jnl: 1535 Job:A10738   S/o:'                                 
1088         8728.8   'Jnl: 3433 Wh:** Receipt        Stk:UPS Traing 7'             
1087         5700     'Jnl: 3433 Wh:** Receipt        Stk:Services'                 
1088         8728.8   'Jnl: 3433 Wh:** Receipt        Stk:UPS TRAINING U8'          
GLJ:04547    3700     'Jnl: 1635 Job:A7802    S/o:'                                
GLJ:04616    3610.7   'Jnl: 1656 Job:A11540   S/o:'                                 
GLJ:04624    3235.02  'Jnl: 1657 Job:A11691   S/o:'

现在我想搜索这个注释字符串,如果它找到包含Job:该字符串的值,我想直接在之后返回值:并从该位置返回 8 个字符,因此它将返回例如 'A10738'

有任何想法吗?

4

1 回答 1

1

假设所有包含“Job:”的字符串都在相同的位置(即从字符 10 开始),那么这应该可以工作:

SELECT
  comment,
  RTRIM(SUBSTRING ( comment, 14, 8 )) as JobNumber

FROM
  table

WHERE
  comment LIKE '%Job:%'

但是如果“工作:”项目可以从任何地方开始,你就需要一些更强大的东西:

SELECT
  comment,
  RTRIM(SUBSTRING ( comment, CHARINDEX ( "Job:" ,comment) + 4, 8 )) as JobNumber

FROM
  table

WHERE
  comment LIKE '%Job:%'

另一种选择(这对于您的场景来说是多余的,但在这里提到它是为了繁荣)是使用正则表达式。RegEx 不是 SQL 原生的,但可以通过 CLR 在 .NET 中实现。请参阅http://msdn.microsoft.com/en-us/magazine/cc163473.aspx#S3

编辑:请注意,我在其中包含了一个RTRIM()从作业编号中删除尾随空格的内容(以防它少于 8 个字符)。如果您需要完整的 8,请RTRIM()SUBSTRING().

于 2013-04-16T07:59:38.367 回答