2015-12-08 32 views
4

我有一個表TBL1與數據的行開始:SQL選擇,其中列有字母

ID  TIN  SSS 
10001 none 1000-20 
10002 69098 PRC 
10003 69099 INC 

我想查詢每個ID的的Legal_Doc_No。每個ID的值是TIN或SSS列。

我如何可以查詢TIN和SSS柱開始,以便只值與數字起將被分配到Legal_Doc_No

Select 
ID, 
'Legal_Doc_No' = case when TIN = Letter then SSS 
else TIN end 
from tbl1 

回答

4

大多數數據庫支持left(),所以你可以做這樣的事情:

select id, 
     (case when left(time, 1) between 'a' and 'z' or left(time, 1) between 'A' and 'Z' 
      then SSS else TIN 
     end) as Legal_Doc_no 
from tbl1; 

根據數據庫,可能有其他解決方案。

在SQL Server中,你可以這樣做:

select id, 
     (case when time like '[a-z]%' 
      then SSS else TIN 
     end) as Legal_Doc_no 
from tbl1; 

如果你有一個區分大小寫的整理,那麼你就需要考慮到這一點:

select id, 
     (case when lower(time) like '[a-z]%' 
      then SSS else TIN 
     end) as Legal_Doc_no 
from tbl1; 
3

如下解決方案的工作假設字母(無),要麼在TIN列或在SSS列,但不能同時包含位數字(即是數字格式):

SELECT ID, 
    CASE WHEN TIN LIKE '%[0-9]%' THEN TIN ELSE SSS END AS Legal_Doc_No 
FROM tbl1