Declare @CustTotalCount as int
Declare @CustMatchCount as int
select @CustTotalCount = count(*) from ENG_CUSTOMERTALLY
select @CustMatchCount = count(*) from Task where MPDReference in(
select ENG_CUSTOMERTALLY_CUSTOMERTASKNUMBER from dbo.ENG_CUSTOMERTALLY)
if(@CustTotalCount>@CustMatchCount)
select distinct
substring(ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO, charindex('-', ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO)
+ 1, 1000)
from dbo.ENG_CUSTOMERMYCROSS where
ENG_CUSTOMERMYCROSS_CUSTOMER_NUMBER in(
select ENG_CUSTOMERTALLY_CUSTOMERTASKNUMBER from ENG_CUSTOMERTALLY1
except
select MPDReference from Task )
我可以转换
- A320-200001-01-1(1)
- A320-200001-02-1(2)
- A320-200001-01-1(2)
- A320-200001-01-1(1)
- A320-200001-01-1(2)
- A320-200001-02-1(1)
要
- 200001-01-1(1)
- 200001-02-1(2)
- 200001-01-1(2)
- 200001-01-1(1)
- 200001-01-1(2)
- 200001-02-1(1)
但我需要:
- 200001-01-1
- 200001-02-1
- 200001-01-1
- 200001-01-1
- 200001-01-1
- 200001-02-1
我如何在SQL和C#中做到这一点?
答案 0 :(得分:0)
模式是否始终相同,如果是这样,您可以使用SUBSTRING拉出您想要的位。
编辑:接收How can i use substring in SQL?
中提出的其他内容你可以
SELECT DISTINCT SUBSTRING(....) FROM ...
答案 1 :(得分:0)
尝试substring和len,此示例切割前6和后4(4 = 10-6)个字符
declare @var varchar(50)
set @var = 'A320-200001-01-1(1)
select substring(@var, 6, len(@var) - 10)
输出:200001-01
在c#中,函数类似,不存在从零开始的索引:
string var = "A320-200001-01-1(1)";
var = var.Substring(5, var.Length - 8);
Console.WriteLine(var);
答案 2 :(得分:0)
如上所述,使用SUBSTRING方法,但只要数据总是采用上面显示的格式,就使用长度为11而不是1000。
在C#中它将是:
string s = "A320-20001-01-1(1)";
string result = s.Substring(s.IndexOf('-'), 11);
再次假设你想要的部分总是11个字符。否则如果它始终是第一个'('你想要结束之前,你再次使用IndexOf方法/函数来查找结束索引并减去第一个索引
答案 3 :(得分:0)
这是一种使用PATINDEX
的技术,它可以使用通配符。
SUBSTRING(ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO,
PATINDEX('%[0-9]%', ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO),
PATINDEX('%(%', ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO)
- PATINDEX('%[0-9]%', ENG_CUSTOMERMYCROSS_MYTECHNIC_TASK_NO)
)
子字符串的开头是第一个数值(%[0-9]%)的位置。长度值是第一个括号的位置('%(%')减去起始位置。