如何用SQL重新排列字符串?

时间:2010-09-03 08:50:00

标签: c# .net sql

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#中做到这一点?

4 个答案:

答案 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]%)的位置。长度值是第一个括号的位置('%(%')减去起始位置。