2011-04-09 50 views
2

我有以下格式數據在SQL Server數據庫表Sql Server的拆分和連鎖

[CPOID] [ContractPO]  [ContractPOTitle] 
1  10-SUP-CN-CNP-0001 Drytech 
2  10-SUP-CN-CNP-0002 EC&M 

我需要編寫一個存儲過程來產生以下結果

[CPOID]  [ContractPO]  [ContractPOTitle] [ConcatField] 
    1  10-SUP-CN-CNP-0001 Drytech   CNP-0001-Drytech    
    2  10-SUP-CN-CNP-0002 EC&M    CNP-0002-EC&M 

其中[ConcatField ]使用拆分[ContractPOTitle]列的最後兩個值並結合[ContractPOTitle]生成結果,並與[ContractPOTitle]

+3

請發佈您迄今爲止編寫的代碼。人們通常不喜歡只爲你寫代碼。事實上,這是一個工作描述,而不是一個問題。 – 2011-04-09 03:36:15

+1

另外,您可能想要指定數字的格式化是否會發生變化,因爲如果他們這樣做,您也需要對此進行規劃。您可能需要閱讀[SubString](http://msdn.microsoft.com/zh-cn/library/ms187748.aspx)和[CharIndex](http://msdn.microsoft.com/zh-cn/ us/library/ms186323.aspx)的功能,因爲這些功能將在您要完成的任務中發揮重要作用。編輯:我忘了[反向](http://msdn.microsoft.com/en-us/library/ms180040.aspx)函數,您應該熟悉此函數 – 2011-04-09 03:48:18

回答

3

合併如果ContractPO字段始終長度相同,你可能只是這樣做:

SELECT 
    CPOID, 
    ContractPO, 
    ContractPOTitle, 
    RIGHT(ContractPO, 8) + '-' + ContractPOTitle as [ConcatField] 
FROM MyTable 

假設ContractPO字段的長度是不固定的,我們必須依靠之後的下一個剝離出來的文字到最後「 - 」,下面的SQL將正常工作。這有點難看,但是這些類型的操作是必需的,因爲在SQL Server中沒有可用的LASTINDEX函數。

SELECT 
    CPOID, 
    ContractPO, 
    ContractPOTitle, 
    RIGHT(ContractPO, CHARINDEX('-', REVERSE(ContractPO), CHARINDEX('-', REVERSE(ContractPO)) + 1) - 1) + '-' + ContractPOTitle as [ConcatField] 
FROM @myTable 
+0

您的代碼假定ContractPO字段的格式OP將不得不告訴我們在10-SUP-CN-CNP-9999之後會發生什麼,是下一個數字10-SUP-CN-CNP-10000?如果是這樣,這將導致您的解決方案中斷。更好的方法是使用SubString,CharIndex和Reverse。 – 2011-04-09 03:54:55

+1

@Mark你是對的,我更新了我的答案,在第二個' - '之後解析出文本。然而,只是想指出,我確實符合我的第一個答案,因爲OP沒有指定,所以「如果ContractPO字段總是相同的長度」。 =] – rsbarro 2011-04-09 04:01:50

+0

+1了不起的工作!我相信這應該適用於OP – 2011-04-09 05:35:36