SQL Server 바꾸기, 특정 문자 이후 모두 제거
내 데이터는 다음과 같습니다.
ID MyText
1 some text; some more text
2 text again; even more text
세미콜론 이후에 세미콜론을 포함한 모든 항목을 삭제하도록 MyText를 업데이트하려면 다음과 같은 작업이 수행됩니다.
ID MyText
1 some text
2 text again
SQL Server Replace를 살펴보았지만 ";"를 확인할 수 있는 실행 가능한 방법이 생각나지 않습니다.
CHARINDEX와 함께 LEFT 조합 사용:
UPDATE MyTable
SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
WHERE CHARINDEX(';', MyText) > 0
WHERE 절은 세미콜론이 없는 행의 업데이트를 건너뜁니다.
위의 SQL이 작동하는지 확인하기 위한 몇 가지 코드는 다음과 같습니다.
declare @MyTable table ([id] int primary key clustered, MyText varchar(100))
insert into @MyTable ([id], MyText)
select 1, 'some text; some more text'
union all select 2, 'text again; even more text'
union all select 3, 'text without a semicolon'
union all select 4, null -- test NULLs
union all select 5, '' -- test empty string
union all select 6, 'test 3 semicolons; second part; third part;'
union all select 7, ';' -- test semicolon by itself
UPDATE @MyTable
SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
WHERE CHARINDEX(';', MyText) > 0
select * from @MyTable
다음과 같은 결과가 나타납니다.
id MyText
-- -------------------------
1 some text
2 text again
3 text without a semicolon
4 NULL
5 (empty string)
6 test 3 semicolons
7 (empty string)
일부 필드가 ";"이고 일부 필드가 그렇지 않은 경우 필드에 세미콜론을 추가하고 설명된 것과 동일한 방법을 사용할 수도 있습니다.
SET MyText = LEFT(MyText+';', CHARINDEX(';',MyText+';')-1)
사용 가능CASE WHEN
';'가 없는 사람들을 내버려 두는 것.
SELECT
CASE WHEN CHARINDEX(';', MyText) > 0 THEN
LEFT(MyText, CHARINDEX(';', MyText)-1) ELSE
MyText END
FROM MyTable
UPDATE MyTable
SET MyText = SUBSTRING(MyText, 1, CHARINDEX(';', MyText) - 1)
WHERE CHARINDEX(';', MyText) > 0
사용하다CHARINDEX
";"을 찾습니다.사용할 경우SUBSTRING
";" 앞에 있는 부품만 반환합니다.
문자열에 대해 무언가를 바꾸거나 일치시켜야 할 경우에는 정규식을 사용하는 것을 선호합니다.
에서 정규식이 완전히 지원되지 않기 때문입니다.T-SQL
다음을 사용하여 구현할 수 있습니다.CLR
기능들.게다가, 당신은 어떤 것도 필요하지 않습니다.C#
또는CLR
MSDN String Utility Functions Sample에서 필요한 모든 지식을 이미 사용할 수 있습니다.
이 경우 정규식을 사용하는 솔루션은 다음과 같습니다.
SELECT [dbo].[RegexReplace] ([MyColumn], '(;.*)', '')
FROM [dbo].[MyTable]
그러나 데이터베이스에 이러한 기능을 구현하면 더 복잡한 문제를 해결하는 데 도움이 됩니다.
아래 예제는 다음과 같은 구성 요소만 배포하는 방법을 보여 줍니다.[dbo].[RegexReplace]
기능은 있지만, 전체를 배포하는 것을 추천합니다.String Utility
학급.
CLR 통합을 활성화합니다.다음 Transact-SQL 명령을 실행합니다.
sp_configure 'clr enabled', 1 GO RECONFIGURE GO
코드 작성(또는 작성)
.dll
일반적으로 이 작업은 Visual Studio 또는 .NET Framework 명령 프롬프트(문서에 나와 있음)를 사용하여 수행할 수 있지만, 저는 Visual Studio를 사용하는 것을 선호합니다.새 클래스 라이브러리 프로젝트 만들기:
다음 코드를 복사하여 에 붙여넣습니다.
Class1.cs
파일:using System; using System.IO; using System.Data.SqlTypes; using System.Text.RegularExpressions; using Microsoft.SqlServer.Server; public sealed class RegularExpression { public static string Replace(SqlString sqlInput, SqlString sqlPattern, SqlString sqlReplacement) { string input = (sqlInput.IsNull) ? string.Empty : sqlInput.Value; string pattern = (sqlPattern.IsNull) ? string.Empty : sqlPattern.Value; string replacement = (sqlReplacement.IsNull) ? string.Empty : sqlReplacement.Value; return Regex.Replace(input, pattern, replacement); } }
솔루션을 구축하고 생성된 솔루션에 대한 경로를 확보합니다.
.dll
파일:로의 경로를 대체합니다.
.dll
다음에 철하다.T-SQL
명령문 및 실행:IF OBJECT_ID(N'RegexReplace', N'FS') is not null DROP Function RegexReplace; GO IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'StringUtils') DROP ASSEMBLY StringUtils; GO DECLARE @SamplePath nvarchar(1024) -- You will need to modify the value of the this variable if you have installed the sample someplace other than the default location. Set @SamplePath = 'C:\Users\gotqn\Desktop\StringUtils\StringUtils\StringUtils\bin\Debug\' CREATE ASSEMBLY [StringUtils] FROM @SamplePath + 'StringUtils.dll' WITH permission_set = Safe; GO CREATE FUNCTION [RegexReplace] (@input nvarchar(max), @pattern nvarchar(max), @replacement nvarchar(max)) RETURNS nvarchar(max) AS EXTERNAL NAME [StringUtils].[RegularExpression].[Replace] GO
바로 그겁니다.기능을 테스트합니다.
declare @MyTable table ([id] int primary key clustered, MyText varchar(100)) insert into @MyTable ([id], MyText) select 1, 'some text; some more text' union all select 2, 'text again; even more text' union all select 3, 'text without a semicolon' union all select 4, null -- test NULLs union all select 5, '' -- test empty string union all select 6, 'test 3 semicolons; second part; third part' union all select 7, ';' -- test semicolon by itself SELECT [dbo].[RegexReplace] ([MyText], '(;.*)', '') FROM @MyTable select * from @MyTable
SQL SERVER 일정 기간 후 모든 항목을 제거합니다.
UPDATE table_name
SET col_name = LEFT(col_name, CHARINDEX('.', col_name) - 1)
WHERE col_name LIKE '%.%'
만약 당신이 우편물을 찾다가 우연히 여기에 왔다면.SQL 응답, 여기 있습니다: 문자가 처음 발생한 후 문자열 잘라내기
SELECT split_part('first:last', ':', 1) AS first_part
언급URL : https://stackoverflow.com/questions/1668014/sql-server-replace-remove-all-after-certain-character
'programing' 카테고리의 다른 글
MongoDB 집계 프레임워크에서 0으로 나눗셈 처리 방법 (0) | 2023.06.21 |
---|---|
파이썬에서 반복기를 재설정할 수 있습니까? (0) | 2023.06.21 |
vue.항목의 불변적이고 지속적인 위치. (0) | 2023.06.21 |
관리자 도커 컨테이너를 mariadb 도커 컨테이너와 연결하려면 어떻게 해야 합니까? (0) | 2023.06.21 |
다른 공간에서 이름이 같은 변수 사용 (0) | 2023.06.21 |