Ответ 1
Попробуйте следующее:
UPDATE YourTable
SET Col2 = RIGHT(Col1,LEN(Col1)-CHARINDEX('/',Col1))
У меня есть таблица с данными 1/1
до 1/20
в одном столбце. Я хочу, чтобы значение 1-20 значение i.e после "/" (передняя косая черта) обновлялось в другой столбец в той же таблице в SQL Server.
Пример:
Столбец имеет значение 1/1,1/2,1/3...1/20
новое значение столбца 1,2,3,..20
i.e Я хочу обновить этот новый столбец
Спасибо заранее...!
Попробуйте следующее:
UPDATE YourTable
SET Col2 = RIGHT(Col1,LEN(Col1)-CHARINDEX('/',Col1))
Пожалуйста, найдите приведенный ниже запрос, также разделите строку на разделитель.
Select Substring(@String1,0,CharIndex(@delimeter,@String1))
Возможно, что-то вроде этого:
Сначала некоторые тестовые данные:
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
Я знаю, что этот вопрос специфичен для SQL-сервера, но я использую postgresql и столкнулся с этим вопросом, поэтому для кого-то другого в подобной ситуации существует функция split_part(string text, delimiter text, field int)
.
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
От: 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)))
Интересная вещь. У меня есть строка xxxx-xxxx.domain.com когда я CHARINDEX ('.'), SQL обнаруживает для меня "-", когда я CHARINDEX ('-') его находит меня ".... Подумайте, как это связано с разделителями данных, поскольку мы используем формат yyyy-MM-dd на сервере, но нужно проверить, что
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('-',ParentBGBU,0)) FROM dbo.tblHCMMaster;