2016-06-21 64 views
1

我在數據庫表像有一個複雜的編號爲00-000-000。 所有名稱存儲在一個字段中分離數據在SQL

01-000-000=Warehouse 
01-001-000-=Rack 
01-001-001=Bin cart 

進入同一個表。我想分離3個不同領域的數據。在SQL中可能嗎?

+0

這就是所謂的正常化,而不是分離的另一種方法。這是可能的,但你必須寫代碼來做到這一點。你有一個*特定的問題嗎? –

+2

當然是的。但是你必須更好地定義你所需要的,並且至少要顯示一些嘗試。作爲提示,您可以使用子字符串函數的更新函數。嘗試一下,然後在這裏添加它,如果你不能這樣做的話。 –

回答

0

由於我們沒有完全夠用的信息我假設你想在開始每行到3倍獨立的數字拆分3號標識符...

如果ID總是固定長度(即2個字母然後是短劃線然後3個字母然後是短劃線然後3個字母),可以使用子字符串函數將它們分開;

WITH TestData as (
    SELECT '01-000-000=Warehouse' AS Id 
    UNION 
    SELECT '01-001-000-=Rack' AS Id 
    UNION 
    SELECT '01-001-001=Bin cart' AS Id 
) 
SELECT 
    Id, 
    substring(Id, 0, 2) AS FirstId, 
    substring(Id, 4, 3) AS SecondId, 
    substring(Id, 8, 3) AS ThirdId, 
    substring(Id, 11, len(id) - 10) AS RestOfString 
FROM TestData 

如果他們是你將不得不使用類似CHARINDEX函數查找虛線的位置,然後再對它們拆分可變長度。

0

如果它總是將是相同的長度,那麼你可以做使用左,右

測試數據一些簡單的代碼;

IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData 
GO 
CREATE TABLE #TestData (FieldName varchar(50)) 
INSERT INTO #TestData (FieldName) 
VALUES 
('01-000-000=Warehouse') 
,('01-001-000-=Rack') 
,('01-001-001=Bin cart') 

查詢;

SELECT 
FieldName 
,LEFT(FieldName,2) Result1 
,RIGHT(LEFT(FieldName,6),3) Result2 
,RIGHT(LEFT(FieldName,10),3) Result3 
FROM #TestData 

結果;

FieldName    Result1 Result2 Result3 
01-000-000=Warehouse 01  000  000 
01-001-000-=Rack  01  001  000 
01-001-001=Bin cart  01  001  001 
+0

我需要倉庫,貨架,賓車分開不是ID –

+0

我的id來本店倉庫和第二總店架和第三賓車 –

+0

我需要導致這種形狀COL-1 warehoue COL-2架COL-3箱車 –

0

將此用於具有2「 - 」符號的動態值。

SELECT SUBSTRING('001-0011-0010',1,CHARINDEX('-','001-0011-0010')-1) COLA,  
      SUBSTRING ('001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1, 
           CHARINDEX('-','001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1)-(CHARINDEX('-','001-0011-0010')+1) 
           ) COLB, 
        SUBSTRING ('001-0011-0010',(CHARINDEX('-','001-0011-0010', 
           CHARINDEX('-','001-0011-0010')+1))+1, LEN('001-0011-0010') 
           ) COLC 

感謝

2

存在與PARSENAME功能

select PARSENAME(replace(left(FieldName,10),'-','.'),3) col1, 
PARSENAME(replace(left(FieldName,10),'-','.'),2) col2, 
PARSENAME(replace(left(FieldName,10),'-','.'),1) col3 from yourTable