Как разделить строку после определенного символа в SQL Server и обновить это значение до определенного столбца - PullRequest
37 голосов
/ 13 февраля 2012

У меня есть таблица с данными 1/1 до 1/20 в одном столбце.Я хочу, чтобы значение от 1 до 20, т.е. значение после '/' (косая черта) было обновлено в другой столбец в той же таблице в SQL Server.

Пример:

Столбец имеет значение 1/1,1/2,1/3...1/20
Новое значение столбца 1,2,3,..20

т.е. Я хочу обновить этот новый столбец

Заранее спасибо...!

Ответы [ 8 ]

88 голосов
/ 13 февраля 2012

Попробуйте это:

UPDATE YourTable
SET Col2 = RIGHT(Col1,LEN(Col1)-CHARINDEX('/',Col1))
9 голосов
/ 24 июля 2015

Найдите нижеприведенный запрос и разделите строку с помощью делитера.

Select Substring(@String1,0,CharIndex(@delimeter,@String1))
1 голос
/ 04 июля 2017

Я знаю, что этот вопрос специфичен для сервера sql, но я использую postgresql и сталкивался с этим вопросом, поэтому для всех, кто находится в подобной ситуации, есть функция split_part(string text, delimiter text, field int).

1 голос
/ 04 января 2017
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('-',ParentBGBU,0)) FROM dbo.tblHCMMaster;
1 голос
/ 13 февраля 2012

Может быть что-то вроде этого:

Сначала несколько тестовых данных:

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
0 голосов
/ 24 октября 2014

От: 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)))
0 голосов
/ 16 апреля 2014

Используйте 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 голосов
/ 10 сентября 2013
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]%'
...