Как заменить все нечисловые значения в столбце varchar на 0

#sql #sql-server #tsql #sql-server-2012

Вопрос:

Я пытаюсь преобразовать таблицу столбцов в BIGINT, но сначала мне нужно удалить все ненужные данные

Это означает, что я должен удалить все нечисловые данные в этом столбце и заменить их нулем, чтобы я мог обновить тип таблицы

Как я могу добиться этого в SQL Server?

Спасибо!

Пример:

 CREATE TABLE SampleData
(
    Col1 VARCHAR(100)
)

-- I want to remove this kind of data
INSERT INTO SampleData
VALUES('<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">2007220737724</font></')

-- I want to keep this kind of data
INSERT INTO SampleData
VALUES('2007220737724')
 

Комментарии:

1. Можете ли вы предоставить примерные данные и желаемые результаты?

2. Изменить: Добавлены некоторые примеры данных

3. Но что вы пробовали?

Ответ №1:

Это кажется достаточно простым, вы можете просто использовать try_cast и заменять все недействительные данные '0'

 update t
set col1='0'
where try_cast(col1 as bigint) is null
 

Ответ №2:

Похоже, что ваши данные являются почти допустимым XML, просто отсутствует правильный закрывающий тег.

Предполагая, что это действительно так, вы могли бы использовать XQuery

 SELECT CAST(Col1 AS xml).value('(font/font/text())[1]','bigint')
FROM SampleData
 

db<>скрипка