私のデータベーステーブルに複雑なIDがあります。00-000-000のようになります。 すべての名前は、同じテーブルに1つのフィールドSQLの分離データ
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
に格納します。私は3つの異なる分野にデータを分離したい。 SQLで可能ですか?
私のデータベーステーブルに複雑なIDがあります。00-000-000のようになります。 すべての名前は、同じテーブルに1つのフィールドSQLの分離データ
01-000-000=Warehouse
01-001-000-=Rack
01-001-001=Bin cart
に格納します。私は3つの異なる分野にデータを分離したい。 SQLで可能ですか?
私たちは、私はあなたが3つの別々の番号に、各行の先頭に3番号識別子を分割したいと仮定しています、非常に十分な情報を持っていないので...
Idsが常に固定されたのであれば長さ(つまり、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関数のようなものを使用し、それらに分割する必要があります。
それは常に同じ長さになるだろう場合、あなたは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
私は倉庫、ラック、ビンカートを分離する必要はありません –
私のIDの最初のヘッドストアの倉庫と2番目のヘッドストアラックと3番目のビンカート –
私はこの形状の結果を必要とするcol-1 warehoue col-2 rack col-3ビンカート –
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
おかげ
は、正規化と呼ばれています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
、ない分離して別の方法があります。それは可能ですが、コードを記述する必要があります。 *具体的な質問がありますか? –
はい、もちろんです。しかし、あなたが必要とするものをよりよく定義し、少なくともいくつかの試みを示す必要があります。ヒントとして、部分文字列関数で更新関数を使用することができます。あなたがそれをすることができない場合は、何かを試してみてください。 –