我有一个包含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'
有什么想法吗?
答案 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()
。