假如某表中一个A字段里面的内容如下1P补差
1P补差
9P 补差
4P 补差
S5557 9/5
S5557 9/5
B1361补差 开-平-预-缝
B1361补差 开-平-预-缝
.
.
.我希望查询得到的数据是
1
9
4
0
0
0
0
.
.也就是说A字段里显示P前面的数字,如果没有P就显示0,请问这样的查询语句是否能实现呢?
1P补差
9P 补差
4P 补差
S5557 9/5
S5557 9/5
B1361补差 开-平-预-缝
B1361补差 开-平-预-缝
.
.
.我希望查询得到的数据是
1
9
4
0
0
0
0
.
.也就是说A字段里显示P前面的数字,如果没有P就显示0,请问这样的查询语句是否能实现呢?
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-03-24 11:29:41
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([col] varchar(20))
insert [tb]
select '1P补差' union all
select '1P补差' union all
select '9P补差' union all
select '4P补差' union all
select 'S55579/5' union all
select 'S55579/5' union all
select 'B1361补差开-平-预-缝' union all
select 'B1361补差开-平-预-缝'
--------------开始查询--------------------------
select
case when CHARINDEX('p',col)>0 then LEFT(col,CHARINDEX('p',col)-1) else 0 end as col
from
tb
----------------结果----------------------------
/* col
-----------
1
1
9
4
0
0
0
0(8 行受影响)*/
from tb
这个语句的话就是取了P前面的数据了,但是万一P在中间的话就会想那样:
最终结果 原来字段
6 6P
32 32P 补差
B1527补差 3 B1527补差 3P 新纱批号 重新复样
B1527补差 3 B1527补差 3P 新纱批号 重新复样
5 5P 色花 重投
B1527补差 3 B1527补差 3P
--那就取 P 前面的 1个字符 substring(col,CHARINDEX('p',col)-1,1)
if object_id('[TB]') is not null drop table [TB]
create table [TB]([col] varchar(20))
insert [TB]
select '1P补差' union all
select '1P补差' union all
select '9P补差' union all
select '4P补差' union all
select 'S55579/5' union all
select 'S55579/5' union all
select 'B1361补差开-平-预-缝' union all
select 'B1361补差开-平-预-缝'select * from [TB]
SELECT CASE ISNUMERIC(LEFT(col,1)) WHEN 1 THEN LEFT(col,1) ELSE 0 END FROM TB/*
1
1
9
4
0
0
0
0*/
select '1P补差' union
select '9P 补差' union
select '4P 补差' union
select 'S5557 9/5' union
select 'B1361补差 开-平-预-缝'select case CHARINDEX ('p',mc) when 0 then '0' else left(mc,CHARINDEX ('p',mc)-1) end as mc from ls--SUBSTRING (<expression>, <starting_ position>, length)
--返回从字符串左边第starting_ position 个字符起length个字符的部分。--CHARINDEX (<’substring_expression’>, <expression>)
--返回字符串中某个指定的子串出现的开始位置