2013-04-16 120 views
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: withing該字符串我想直接:後返回的值,並從該位置返回8個字符所以它會返回例如'A10738'

任何想法?

回答

1

假設包含「工作:」您的所有字符串都在同一個位置(即起始字符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,請從SUBSTRING()附近刪除RTRIM()

+0

非常感謝這個作品:) – user1546143

+0

@ user1546143我很高興,感謝您花時間接受。還要注意,如果工作號少於8個字符,就會添加一個關於RTRIM函數的註釋,它會給你少於8個字符。 – Sepster

相關問題