SQL中的隔离数据

时间:2016-06-21 12:52:12

标签: sql-server

我的数据库表中有一个复杂的ID,例如00-000-000。 所有名称都存储在一个字段中

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

进入同一张桌子。我想在3个不同的领域中分离数据。是否可以在SQL中使用?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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函数的东西来找到破折号的位置,然后拆分它们。

答案 2 :(得分:0)

如果它总是长度相同那么你可以使用LEFT和RIGHT做一些简单的代码

测试数据;

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

答案 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

由于