2010-09-03 38 views
1
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) 

我可以轉換如何重新排列字符串與SQL?

- 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) 

TO

- 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

模式總是相同的,如果是這樣的話,你可以用SUBSTRING來取出你想要的位。

編輯:採取在How can i use substring in SQL?

要求額外的東西,你可以

SELECT DISTINCT SUBSTRING(....) FROM ... 
0

嘗試子和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#,功能是相似的,exept ZER鄰 - 基於索引:

string var = "A320-200001-01-1(1)"; 
    var = var.Substring(5, var.Length - 8); 
    Console.WriteLine(var); 
+0

我可以做那個linq C#嗎? – Penguen 2010-09-03 09:01:50

+0

但它可以是B45-200001-01-1(1) – Penguen 2010-09-03 09:05:11

+0

然後你需要找到第一個char ' - ',請嘗試SQL中的CHARINDEX,或C#中的string.IndexOf – Branimir 2010-09-03 09:13:52

0

如上回答,使用SUBSTRING方法等你是但只要該數據總是在你上面顯示的格式使用的11代替1000的長度。

在C#這將是:

string s = "A320-20001-01-1(1)"; 
string result = s.Substring(s.IndexOf('-'), 11); 

再次,這是假設你想要的部分總是11個字符。否則,如果它始終是第一個'('你想結束之前,你再次IndexOf方法/函數來找到結束索引並減去第一個索引

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]%)的位置,長度值是第一括號(「%(%」)的起始更少的位置