У меня есть эта функция для удаления нежелательных символов:
USE MASTER
GO
CREATE FUNCTION [dbo].[fn_StripCharacters]
(
@String NVARCHAR(MAX),
@MatchExpression VARCHAR(255)
)
RETURNS NVARCHAR(MAX)
WITH ENCRYPTION, SCHEMABINDING
AS
BEGIN
SET @MatchExpression = '%['+@MatchExpression+']%'
WHILE PatIndex(@MatchExpression, @String) > 0
SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1, '')
RETURN @String
END
Я использую эту функцию в следующем сценарии, над которым я работаю, чтобы получить последний раз, когда машина была перезагружена:
Я также Заменить повторяющиеся пробелы одним пробелом в T- SQL, я не хочу повторяющихся пробелов в возвращаемой строке.
--=================================
-- script to get last time the machine rebooted
-- and what sql server and host OS do we have?
-- Marcello Miorelli 16-mar-2020
--=================================
IF OBJECT_ID('TEMPDB.DBO.#RADHE') IS NOT NULL
DROP TABLE #RADHE
--create the table
CREATE TABLE #Radhe (logdate datetime not null default (getdate()),
processinfo varchar(108) not null default ('Radhe'),
the_text varchar(4000))
-- create a non-unique clustered index
CREATE CLUSTERED INDEX IXC_RADHE_RADHE ON #RADHE(logdate desc, processinfo asc)
-- load the table
INSERT #Radhe
exec sp_readerrorlog 0,1,'Copyright (c)'
SELECT @@SERVERNAME as [Server Name]
,R.logdate AS [Last Time Server Rebooted]
,REPLACE(
REPLACE(
REPLACE(
REPLACE(
master.dbo.fn_StripCharacters(R.the_text,
'^a-z0-9()#@.<>^:^-^ '),
'Copyright (C) 2019 Microsoft Corporation','')
,' ','<>')
,'><','')
,'<>',' ')
FROM #RADHE R
это на моей текущей машине дает мне:
и это нормально. Тем не менее, когда я go проверяю какой-то другой аппарат, построенный в 2017 году, вместо 2019 года, я получаю следующее:
Вопрос:
Я хочу избавиться от следующего фрагмента сценария, независимого от года (2019):
Copyright (C) 2019 Microsoft Corporation
Какие маскируют символы можно ли использовать в этой ситуации?
Может быть, я смогу добиться этого с помощью patindex ? Я пытался:
Как убрать все не алфавитные c символов из строки в SQL Сервер?