SQL选择列以字母开头的位置

时间:2015-12-08 03:22:37

标签: sql sql-server sql-server-2012

我有一个包含数据行的表tbl1:

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

2 个答案:

答案 0 :(得分:6)

大多数数据库支持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;

答案 1 :(得分:3)

假设TIN列或SSS列(但不是两者)包含数字(即数字格式),以下解决方案应该有效:

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