数据库字段值有多种情况,我需要取特定字符之前的字符如下sql语句SQL codeselect ProductName,Encapsulatio
数据库字段值有多种情况,我需要取特定字符之前的字符
如下sql语句
- SQL code
select ProductName,EncapsulationType from WorkOrder
可以查询如下信息:
OM011 OC
GC012 UT
GC011 UT1
GC013 UT1_GC013
GC015 UT1_GC015
我需要取字符“_”之前的数据,sql预计应该怎么写
更改后的查询结果如下:
OM011 OC
GC012 UT
GC011 UT1
GC013 UT1
GC015 UT1
[解决办法]
- SQL code
CREATE TABLE t1( col VARCHAR(50))INSERT INTO t1SELECT 'OM011 OC' UNION ALLSELECT 'GC012 UT' UNION ALLSELECT 'GC011 UT1' UNION ALLSELECT 'GC013 UT1_GC013' UNION ALLSELECT 'GC015 UT1_GC015'SELECT * FROM t1SELECT CASE WHEN CHARINDEX('_',col)>0 THEN LEFT(col,CHARINDEX('_',col)-1) ELSE col ENDFROM t1----------------------(无列名)OM011 OCGC012 UTGC011 UT1GC013 UT1GC015 UT1
[解决办法]
- SQL code
WITH WorkOrder (ProductName,EncapsulationType) AS( SELECT 'OM011', 'OC' UNION ALL SELECT 'GC012', 'UT' UNION ALL SELECT 'GC011', 'UT1' UNION ALL SELECT 'GC013', 'UT1_GC013' UNION ALL SELECT 'GC015', 'UT1_GC015' ) select ProductName,CASE WHEN CHARINDEX('_',EncapsulationType,0)=0 THEN EncapsulationType WHEN CHARINDEX('_',EncapsulationType,0)>0 THEN SUBSTRING(EncapsulationType,0,4) END EncapsulationType from WorkOrder /* ProductName EncapsulationType ----------- ----------------- OM011 OC GC012 UT GC011 UT1 GC013 UT1 GC015 UT1 (5 行受影响) */
[解决办法]
