如何在SQL Server中的特定字符之后拆分字符串并将此值更新为特定列

时间:2012-02-13 11:53:49

标签: sql-server split sql-update

我在一列中有数据1/11/20的表格。我希望值为1到20,即'/'(正斜杠)后的值更新到SQL Server中同一表中的其他列。

实施例

列的值为1/1,1/2,1/3...1/20
新列值1,2,3,..20

我想更新这个新专栏

提前致谢...!

8 个答案:

答案 0 :(得分:87)

试试这个:

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

答案 1 :(得分:7)

请查找以下查询,并使用分隔符分割字符串。

Select Substring(@String1,0,CharIndex(@delimeter,@String1))

答案 2 :(得分: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

答案 3 :(得分:1)

SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('-',ParentBGBU,0)) FROM dbo.tblHCMMaster;

答案 4 :(得分:1)

我知道这个问题是特定于sql server的,但是我使用的是postgresql并遇到了这个问题,所以对于其他类似情况的人来说,还有split_part(string text, delimiter text, field int)函数。

答案 5 :(得分:-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]%'

答案 6 :(得分:-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

答案 7 :(得分:-1)

来自:http://www.sql-server-helper.com/error-messages/msg-536.aspx

要使用LEFT功能,如果并非所有数据都是“1/12”形式,则需要在上面的第二行中使用此功能:

Set Col2 = LEFT(Col1, ISNULL(NULLIF(CHARINDEX('/', Col1) - 1, -1), LEN(Col1)))