У меня есть столбец с такими полями, как C5, C6, C3, CC, CA, CD и т. д.
Я хочу найти все столбцы, в которых есть буква, а затем номер, например C5 и C6.
Я знаю, если да:
SELECT * FROM TABLE WHERE FIELD LIKE 'C%'
Он также вернет CC, CA, CD, но я не хочу этого, я хочу просто вернуть числа единиц. Я также хочу обновить этот столбец, удалив номер, поэтому C5 становится C, C6 становится C и так далее.





В справочнике Microsoft по Like содержит информацию о выражениях, которые вы можете использовать в этом типе операторов.
Запрос будет SELECT * FROM TABLE WHERE FIELD LIKE 'C[0-9]%'
Обновите на основе совпадения и установите поле влево (поле, 1)
Что вам действительно нужно сделать, так это переделать вашу структуру, так как вы не должны хранить данные таким образом. Дочерняя таблица - это способ хранить такие данные, а затем вы можете легко запрашивать и обновлять. Проблема с принятым решением заключается в том, что у вас все равно будут проблемы, если текст не начинается с C, и обновление будет в лучшем случае неточным, если в одной текстовой группе есть кратные с C5, C6. Это нарушает абсолютное первое правило проектирования базы данных: никогда не храните более одного фрагмента информации в столбце на строку.
Если вам действительно нужен точный способ найти и обновить эти записи (даже если вы не можете изменить структуру), вам нужно вытащить их в связанную временную таблицу, которая имеет record_Id и значение и столбец обновленных битов. Затем найдите те, у которых есть номер, и обновите их вместе с установленным флагом обновления. Затем для идентификаторов записей, у которых есть хотя бы один флаг, вы должны воссоздать строку и обновить саму запись. Вам также необходимо решить, нужны ли вам два значения только C, если C5 и C6 оба находятся в строке данных.
Я понимаю вашу точку зрения, но я не проектировал базу данных, поэтому мне приходится работать с тем, что у меня есть. Спасибо за информацию.
Вот почему я рассказал вам о методе перемещения данных во временную таблицу, чтобы выполнить очистку и вернуться к плохой структуре. Другой метод не поможет точно очистить ваши данные.
Используйте любой из этих
select LEFT(col,1) from @t where col like 'c[0-9]%'
select substring(col,1,1) from @t where col like 'c[0-9]%'
Спасибо. Это сработало. Как удалить числовую часть?