Sql server SQL中的数据隔离
我的数据库表中有一个复杂的Id,如is 00-000-000。 所有名称存储在一个字段中Sql server SQL中的数据隔离,sql-server,Sql Server,我的数据库表中有一个复杂的Id,如is 00-000-000。 所有名称存储在一个字段中 01-000-000=Warehouse 01-001-000-=Rack 01-001-001=Bin cart 放在同一张桌子上。我想在3个不同的字段中分离数据。在SQL中可能吗?由于我们没有足够的信息,我假设您希望将每行开头的3个数字标识符拆分为3个单独的数字 如果ID始终是固定长度的(即2个字母,然后是一个破折号,然后是3个字母,然后是一个破折号,然后是3个字母),则可以使用子字符串函数将其拆分
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
放在同一张桌子上。我想在3个不同的字段中分离数据。在SQL中可能吗?由于我们没有足够的信息,我假设您希望将每行开头的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函数的函数来查找虚线的位置,然后在其上拆分。如果虚线长度始终相同,则可以使用左右键执行一些简单的代码 试验数据
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“-”号的动态值
谢谢还有另一个带有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
这叫做正常化,而不是隔离。这是可能的,但您必须编写代码才能做到这一点。你有具体的问题吗?是的,当然有。但是你必须更好地定义你需要什么,并且,至少展示一些尝试。作为提示,您可以将更新函数与子字符串函数一起使用。我需要仓库、货架、仓车分开,而不是id我的id第一个总店仓库、第二个总店货架和第三个仓车我需要这个形状的结果col-1 warehoue col-2 rack col-3 Bin Cart更新你的问题并准确显示你想要的结果。列的数量以及每个列应包含哪些数据
select PARSENAME(replace(left(FieldName,10),'-','.'),3) col1,
PARSENAME(replace(left(FieldName,10),'-','.'),2) col2,
PARSENAME(replace(left(FieldName,10),'-','.'),1) col3 from yourTable