Как заменить несколько символов в SQL?

Нажмите CTRL + F5 , чтобы полностью обновить все на вашей веб-странице, включая скрипты и таблицы стилей.

Кроме того, вы можете включить таблицы стилей, которые будут обслуживаться, со страницы динамического сервера [php / asp.net] и Response.Expires = -1, что заставит клиента явно загружать css при каждом запросе HTTP-GET. Вы также можете сделать это в настройках вашего веб-сервера для типов MIME CSS.

34
задан Community 23 May 2017 в 12:02
поделиться

4 ответа

I серьезно рассмотрел бы создание CLR UDF вместо и использование регулярных выражений (как строку, так и шаблон можно передать в качестве параметров) для выполнения полного поиска и замены диапазона символов. Он должен легко превзойти этот SQL UDF.

23
ответ дан 27 November 2019 в 16:09
поделиться

Один из вариантов - использовать таблицу чисел / подсчетов для управления итеративным процессом через псевдо-набор основанный на запросе.

Общая идея замены символов может быть продемонстрирована с помощью простого подхода таблицы карты символов:

create table charMap (srcChar char(1), replaceChar char(1))
insert charMap values ('a', 'z')
insert charMap values ('b', 'y')


create table testChar(srcChar char(1))
insert testChar values ('1')
insert testChar values ('a')
insert testChar values ('2')
insert testChar values ('b')

select 
coalesce(charMap.replaceChar, testChar.srcChar) as charData
from testChar left join charMap on testChar.srcChar = charMap.srcChar

Затем вы можете ввести подход таблицы подсчета для выполнения поиска по каждой позиции символа в строке.

create table tally (i int)
declare @i int
set @i = 1
while @i <= 256 begin
    insert tally values (@i)
    set @i = @i + 1
end

create table testData (testString char(10))
insert testData values ('123a456')
insert testData values ('123ab456')
insert testData values ('123b456')

select
    i,
    SUBSTRING(testString, i, 1) as srcChar,
    coalesce(charMap.replaceChar, SUBSTRING(testString, i, 1)) as charData
from testData cross join tally
    left join charMap on SUBSTRING(testString, i, 1) = charMap.srcChar
where i <= LEN(testString)
0
ответ дан 27 November 2019 в 16:09
поделиться

Mango

Предоставляет интерфейсы для функций аргументов 0, 1 и 2. Использует дженерики Java. Хороший набор алгоритмов для работы с функциями.

JGA

Предоставляет классы для 0, 1, 2 и произвольного числа функций аргументов. Объекты домена делят их на подклассы. Использует дженерики Java. Обширный набор алгоритмов. Включает JFXG (Java Functor eXpression Grammar) - анализируемый язык, предназначенный для упрощения создания произвольно сложных функторов. Предоставляет несколько алгоритмов для работы с функциями.

Apache Commons Functor

Предоставляет интерфейсы для функций аргументов 0, 1 и 2, а также процедур аргументов 0, 1 и 2 (которые не возвращают значения). Использует дженерики Java. Хороший набор алгоритмов.

Google Guava (ранее был коллекцией Google)

Предоставляет интерфейсы функций и предикатов для функций с одним аргументом. Использует дженерики Java. Предоставляет только метод compose для объединения функций. Довольно простой.

FunctionalJ

Предоставляет интерфейсы и классы для 0, 1, 2 и произвольного числа функций аргументов. Использует дженерики Java. Существующие методы можно превратить в функции с помощью предоставленных классов отражения функций.

Его предложение актуально и подходит НЕЗАВИСИМО от того, как вы решите очистить свои данные.

В частности, в моем текущем проекте у меня есть постоянный вычисляемый столбец, который обрезает все ведущие нули (к счастью, это действительно легко обрабатывается в прямом T-SQL. ) из некоторых конкретных числовых идентификаторов, хранящихся несовместимо с ведущими нулями. Он сохраняется в постоянных вычисляемых столбцах в таблицах, которые в нем нуждаются, и индексируется, поскольку этот согласованный идентификатор часто используется в соединениях.

0
ответ дан 27 November 2019 в 16:09
поделиться

Один полезный трюк в SQL - это возможность использовать @var = function (...) для присвоения значения. Если у вас есть несколько записей в наборе записей, ваша переменная назначается несколько раз с побочными эффектами:

declare @badStrings table (item varchar(50))

INSERT INTO @badStrings(item)
SELECT '>' UNION ALL
SELECT '<' UNION ALL
SELECT '(' UNION ALL
SELECT ')' UNION ALL
SELECT '!' UNION ALL
SELECT '?' UNION ALL
SELECT '@'

declare @testString varchar(100), @newString varchar(100)

set @teststring = 'Juliet ro><0zs my s0x()rz!!?!one!@!@!@!'
set @newString = @testString

SELECT @newString = Replace(@newString, item, '') FROM @badStrings

select @newString -- returns 'Juliet ro0zs my s0xrzone'
49
ответ дан 27 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: