2012-02-13 11 views
31

データが1/11/20のテーブルが1つの列にあります。 SQL Serverの同じテーブル内の他の列に '/'(前部スラッシュ)が更新された後に値1〜20、つまり値が必要です。SQL Serverで特定の文字の後に文字列を分割し、この値を特定の列に更新する方法

例:

列が...私はこの新しい列に事前に

感謝を更新したい値1/1,1/2,1/3...1/20
新しい列の値を1,2,3,..20

すなわちを持っています!

答えて

70

これを試してみてください:

UPDATE YourTable 
SET Col2 = RIGHT(Col1,LEN(Col1)-CHARINDEX('/',Col1)) 
+0

'charindex'と' right'を組み合わせることは素晴らしいアイデアです - それは 'left'でもうまくいきます:) –

+1

自分自身が必要で、' LEN'を 'LEN'で' CHARINDEX' with 'LOCATE' –

1

たぶん、このような何か:

まずいくつかのテストデータ:このようなその後

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 
-1
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]%' 
+0

コード専用の投稿はここでは避けてください。おそらくあなたは説明を含めるべきです。 –

+0

説明はありませんか?関連のない列名の使用 –

-1

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 
+0

詳しい説明をしてください。あなたの答えは曖昧です。 – mzedeler

-1

から: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))) 
+0

ありがとうSonerGönül! – Miguel

+0

私は何を意味するのか分からない人もいると思います。 データ: 1/1; 1/2; 2/1; 2/2; 2/3; 3; 4/1; サブパーツがないため「3」にエラーが発生する可能性があります。 – Miguel

6

下記のクエリもdelimeterで文字列を分割してください。

Select Substring(@String1,0,CharIndex(@delimeter,@String1)) 
-1
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('-',ParentBGBU,0)) FROM dbo.tblHCMMaster; 
+0

はこの質問には役に立たないかもしれませんが、この回答は1時間のグーグルを節約します。'A5/LS/CHMB/17-18/WAI'が期待通りの結果をもたらすのは' A5' –

0

私は似たような状況では誰のために、split_part(string text, delimiter text, field int)機能があるので、この質問は、SQL Serverに固有のものですが、私は、PostgreSQLを使用していますし、この質問に出くわした知っています。

関連する問題