как обновить только первый символ в SQL Server

У меня есть данные в MyTable

ID = 1, No1 = 23, No2 = 45, D = 1 ID = 2, No1 = 12, No2 = 5, D = 1 ID = 3, No1 = 14, No2 = 4, D = 1 ID = 4, No1 = 41, No2 = 12, D = 1 ID = 5, No1 = 2, No2 = 25, D = 1 ID = 6, No1 = 3, No2 = 96, D = 1 

Я хочу обновить только первый символ столбца No1, если он равен 1, тогда он должен быть 0 следующим образом

 ID = 1, No1 = 23, No2 = 45, D = 1 ID = 2, No1 = 02, No2 = 5, D = 1 ID = 3, No1 = 04, No2 = 4, D = 1 ID = 4, No1 = 41, No2 = 12, D = 1 ID = 5, No1 = 2, No2 = 25, D = 1 ID = 6, No1 = 3, No2 = 96, D = 1 

Теперь я использую C # для этого, я открываю все записи No1 из MyTable и проверяя на C # вручную, используя loop если я нашел первый символ как 1, тогда я делаю строку и обновляю базу данных .. и он работает, но проблема в том, что у меня есть 10000 X 100 записей в Mytable поэтому каждый цикл цикла будет выполняться 10000 X 100 раз, а результат – низкая производительность приложения. Я просто хочу спросить, есть ли какой-либо метод для обновления. Только кулачный символ No1 coloumn, используя только SQL и C #. ..

Обновление: все типы данных MyTable являются int

Если ваш тип данных для No1 является INT, то, если вы находите и заменяете значение, начинается с 1, SQLServer будет хранить значение как 2 в случае 12, а не 02.

 update #MyTable set No1 = case when left(No1,1) = 1 then stuff(NO1,1,1,0) else No1 end --Update 

введите описание изображения здесь

Учитывая, что мы знаем, что значения варьируются от 0 до 9999, запрос может выглядеть так:

 update MyTable set No1 = CASE WHEN No1 between 10 and 19 THEN No1 - 10 WHEN No1 between 100 and 199 THEN No1 - 100 WHEN No1 between 1000 and 1999 THEN No1 - 1000 END where No1 between 10 and 19 or No1 between 100 and 199 or No1 between 1000 and 1999 

Если его запустить очень часто, вам может потребоваться добавить соответствующие индексы и т. Д., Но быстрый тест подсказывает, что это не так уж плохо.

Согласно @chrisb Old Answer, он работает на nvarchar(MAX) ,

 UPDATE MyTable SET No1 = '0' + SUBSTRING(No1, 2, LEN(No1) - 1) WHERE No1 LIKE '1%' 
Interesting Posts

Как установить несколько локальных переменных в одной строке с помощью T-SQL?

Новое для конфигурации SSRS

Как рассчитать количество строк, используя скользящее окно, основанное на времени?

Невозможно создать хранимые процедуры с помощью EXECUTE AS с использованием Принципа, основанного на сертификате

Разбор XML не выполнен в строке 1, столбец 9: DTD запрещен

SQL – как считать «да» и «нет»

Таблица Temp для вставки или обновления главной таблицы с аудитом и протоколированием

присоединение к маленькому столу значительно замедляет запрос

Строить хранимую процедуру для группировки данных в диапазоны с примерно равными результатами в каждом ковше

Сравните значение базы данных строки с более чем двумя словами

SQL Удалить обновление внешнего ключа.

Нажатие вставок в SQL Server с помощью C #?

Высокое использование ЦП от процесса SQLServer

SQL Proc медленнее на более новой / более быстрой машине?

Выполнение уникальных и множественных NULLS для столбца в таблице

Давайте будем гением компьютера.