データが1/1
〜1/20
のテーブルが1つの列にあります。 SQL Serverの同じテーブル内の他の列に '/'(前部スラッシュ)が更新された後に値1〜20、つまり値が必要です。SQL Serverで特定の文字の後に文字列を分割し、この値を特定の列に更新する方法
例:
列が...私はこの新しい列に事前に
感謝を更新したい値1/1,1/2,1/3...1/20
新しい列の値を1,2,3,..20
すなわちを持っています!
データが1/1
〜1/20
のテーブルが1つの列にあります。 SQL Serverの同じテーブル内の他の列に '/'(前部スラッシュ)が更新された後に値1〜20、つまり値が必要です。SQL Serverで特定の文字の後に文字列を分割し、この値を特定の列に更新する方法
例:
列が...私はこの新しい列に事前に
感謝を更新したい値1/1,1/2,1/3...1/20
新しい列の値を1,2,3,..20
すなわちを持っています!
これを試してみてください:
UPDATE YourTable
SET Col2 = RIGHT(Col1,LEN(Col1)-CHARINDEX('/',Col1))
たぶん、このような何か:
まずいくつかのテストデータ:このようなその後
DECLARE @tbl TABLE(Column1 VARCHAR(100))
INSERT INTO @tbl
SELECT '1/1' UNION ALL
SELECT '1/20' UNION ALL
SELECT '1/2'
:
SELECT
SUBSTRING(tbl.Column1,CHARINDEX('/',tbl.Column1)+1,LEN(tbl.Column1))
FROM
@tbl AS tbl
SELECT emp.LoginID, emp.JobTitle, emp.BirthDate, emp.ModifiedDate ,
CASE WHEN emp.JobTitle NOT LIKE '%Document Control%' THEN emp.JobTitle
ELSE SUBSTRING(emp.JobTitle,CHARINDEX('Document Control',emp.JobTitle),LEN('Document Control'))
END
,emp.gender,emp.MaritalStatus
FROM HumanResources.Employee [emp]
WHERE JobTitle LIKE '[C-F]%'
コード専用の投稿はここでは避けてください。おそらくあなたは説明を含めるべきです。 –
説明はありませんか?関連のない列名の使用 –
CHARINDEX
を使用してください。おそらくユーザー機能を作ってください。この分割を頻繁に使用する場合。
私はこの関数を作成します。
CREATE FUNCTION [dbo].[Split]
(
@String VARCHAR(max),
@Delimiter varCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT 'INT_COLUMN' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
'STRING_COLUMN' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)
GO
詳しい説明をしてください。あなたの答えは曖昧です。 – mzedeler
から:http://www.sql-server-helper.com/error-messages/msg-536.aspx
ないすべてのデータがフォームにある場合LEFT関数を使用するには「1/12」あなたは上記の2行目にこれを必要とする:
Set Col2 = LEFT(Col1, ISNULL(NULLIF(CHARINDEX('/', Col1) - 1, -1), LEN(Col1)))
下記のクエリもdelimeterで文字列を分割してください。
Select Substring(@String1,0,CharIndex(@delimeter,@String1))
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('-',ParentBGBU,0)) FROM dbo.tblHCMMaster;
はこの質問には役に立たないかもしれませんが、この回答は1時間のグーグルを節約します。'A5/LS/CHMB/17-18/WAI'が期待通りの結果をもたらすのは' A5' –
私は似たような状況では誰のために、split_part(string text, delimiter text, field int)
機能があるので、この質問は、SQL Serverに固有のものですが、私は、PostgreSQLを使用していますし、この質問に出くわした知っています。
'charindex'と' right'を組み合わせることは素晴らしいアイデアです - それは 'left'でもうまくいきます:) –
自分自身が必要で、' LEN'を 'LEN'で' CHARINDEX' with 'LOCATE' –