如何在字符串中搜索特定值,然后在该字符串中找到返回值

时间:2013-04-16 07:52:25

标签: sql sql-server sql-server-2008

我有一个包含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'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

FROM
  table

WHERE
  comment LIKE '%Job:%'

但如果“Job:”项目可以从任何地方开始,那么你需要更强大的东西:

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

FROM
  table

WHERE
  comment LIKE '%Job:%'

另一个选择(对于你的场景来说是过度杀戮,但在繁荣中提到它)将是使用RegEx。 RegEx不是SQL的原生,但可以通过CLR在.NET中实现。请参阅http://msdn.microsoft.com/en-us/magazine/cc163473.aspx#S3

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