根据内容使用sql提取字符串的一部分

时间:2015-09-04 09:50:54

标签: sql sql-server tsql

假设我在列fullname

中有数据

示例:

Mr Robert                          
Mr Frnk Perk                       
Mr Grenille Ta                    
Mrs Fraes Kin                        
Isoel Newto                          
Mr Iin McLen                          
Keh Farringn                        
Mr Sepen Taor                       
Peer Snce                            
Mr Plip Luon                        
Mr Andew Macie                                                     
Mr Timhy Waers                      
Mrs Juiet Wriht                       
Kaye Ashwth                           
Dr Meryn Wiseman 

如何仅提取标题'Mr','Mrs','Dr',' '等。如果没有特定名称的标题,则应该是原样。

2 个答案:

答案 0 :(得分:0)

您可以将substring方法与解码一起使用。

DECODE (TRIM(SUBSTR(string,0 ,3)), 'Mr', 'Mr', 'Mrs', 'Mrs','Dr', 'Dr', '')

假设你正在使用oracle。请指定您正在使用的数据库。

答案 1 :(得分:0)

这是使用正则表达式的一些小片段:

REGEXP_SUBSTR(p.full_name,'^ \ S +',1,1) - 这将从开头到第一个空格提取整个文本。

REGEXP_LIKE(REGEXP_SUBSTR(p.full_name,'^ \ S +',1,1),'^(Mr | Mrs | Dr)$') - 检查提取的文本是先生还是夫人或博士

WITH people AS 
(
SELECT
  DECODE(LEVEL
    ,1, 'Mr Robert' 
    ,2, 'Mr Frnk Perk'
    ,3, 'Mr Grenille Ta'
    ,4, 'Mrs Fraes Kin'
    ,5, 'Isoel Newto'                          
    ,6, 'Mr Iin McLen'                          
    ,7, 'Keh Farringn'                        
    ,8, 'Mr Sepen Taor'                       
    ,9, 'Peer Snce'                            
    ,10, 'Mr Plip Luon'                        
    ,11, 'Mr Andew Macie'                                                     
    ,12, 'Mr Timhy Waers'                      
    ,13, 'Mrs Juiet Wriht'                       
    ,14, 'Kaye Ashwth'                           
    ,15, 'Dr Meryn Wiseman'
  ) AS full_name
FROM
  dual
CONNECT BY LEVEL < 16
)
SELECT
  p.full_name
  ,CASE
    WHEN REGEXP_LIKE(REGEXP_SUBSTR(p.full_name, '^\S+',1,1), '^(Mr|Mrs|Dr)$') THEN
      REGEXP_SUBSTR(p.full_name, '^\S+',1,1)
    ELSE
      ' '
  END AS title
FROM
  people p

给出以下结果:

FULL_NAME        |  TITLE
------------------------
Mr Robert        |  Mr
Mr Frnk Perk     |  Mr
Mr Grenille Ta   |  Mr
Mrs Fraes Kin    |  Mrs
Isoel Newto      |  
Mr Iin McLen     |  Mr
Keh Farringn     |  
Mr Sepen Taor    |  Mr
Peer Snce        |  
Mr Plip Luon     |  Mr
Mr Andew Macie   |  Mr
Mr Timhy Waers   |  Mr
Mrs Juiet Wriht  |  Mrs
Kaye Ashwth      |  
Dr Meryn Wiseman |  Dr