中是否有可能
我的数据基表中有一个复杂的ID,如00-000-000。所有名称存储在一个字段中
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
进入同一张桌子。我想在3个不同的字段中隔离数据。在SQL?
还有另一种带有副词的方法
select PARSENAME(replace(left(FieldName,10),'-','.'),3) col1,
PARSENAME(replace(left(FieldName,10),'-','.'),2) col2,
PARSENAME(replace(left(FieldName,10),'-','.'),1) col3 from yourTable
,因为我们没有足够的信息,我假设您希望在每行开始时将3个数字标识符分为3个单独的数字...
如果ID始终为固定长度(即2个字母,然后折磨到3个字母,然后折断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函数之类的东西来查找破折号的位置,然后在它们上拆分。
如果始终是相同的长度,则可以使用左右
进行一些简单的代码测试数据;
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
将其用于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
谢谢