У меня есть столбец NVARCHAR(10)
в таблице. Он может хранить любые строки UNICODE.SQL Server: Заменить символы, отличные от символа, в строке без временной таблицы
Я хочу заменить каждый символ, отличный от '1', с '0'.
Предположим, у меня есть строка 'C18 *'. Я должен получить «0100000100».
мне удалось сделать это с помощью вспомогательной таблицы, которая содержит индексы от 1 до размера моей колонки (10), как это:
CREATE TABLE HELP(Idx INT)
INSERT INTO HELP
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
DECLARE @myStr VARCHAR(10)
SET @myStr = 'C18*'
SELECT STUFF((SELECT '' + CASE(B.Ch) WHEN '1' THEN '1' ELSE '0' END FROM (
SELECT SUBSTRING(A.Val,H.Idx,1) AS Ch
FROM
(SELECT @myStr AS Val) A
CROSS JOIN HELP H
)B FOR XML PATH('')),1,0,'')
Это работает, но это может быть сделано в лучше путь? Это кажется уродливым для простого обновления, игнорируя тот факт, что размер столбца может меняться со временем. Он также должен работать на SQL> = 2005.
SQL Скрипкиhere
Спасибо!
Вы можете сделать это только с помощью стандартного прок или вы можете использовать процедуру .Net? Это что-то, что нужно запускать много раз или только один раз для очистки данных? –
@MauriceReeves Он должен запускаться только один раз (некоторые поврежденные данные в нескольких наших базах данных) против десятков больших таблиц (10K + строк). Простое консольное приложение разрешило бы это, но я спросил, если такая же ситуация повторится + мне не нравится эта временная таблица. – darkdante
Таблица чисел очень полезна. У многих это постоянный стол. –