2008-09-19 2 views
1

В моей базе данных (SQL 2005) У меня есть поле, в котором есть комментарий, но в комментарии у меня есть идентификатор, и я хотел бы удалить только идентификатор, а IF возможно преобразовать его в INT:SQL strip text and convert to integer

activation successful of id 1010101

линия выше точная структура данных в поле БД.

И нет, я не хочу, чтобы это сделать в коде приложения, я на самом деле не хочу трогать, только в том случае, если вам интересно ;-)

+0

Вы хотите изменить поле в БД только иметь идентификационный номер и сделать поле в Int? Вид неясно, что вы делаете. – 2008-09-19 15:10:46

ответ

1

Это должно сделать трюк:

SELECT SUBSTRING(column, PATINDEX('%[0-9]%', column), 999) 
FROM table 

на основе данных выборки, это то есть только одно вхождение целого числа в строке и что оно в конце.

0
-- Test table, you will probably use some query 
DECLARE @testTable TABLE(comment VARCHAR(255)) 
INSERT INTO @testTable(comment) 
    VALUES ('activation successful of id 1010101') 

-- Use Charindex to find "id " then isolate the numeric part 
-- Finally check to make sure the number is numeric before converting 
SELECT CASE WHEN ISNUMERIC(JUSTNUMBER)=1 THEN CAST(JUSTNUMBER AS INTEGER) ELSE -1 END 
FROM ( 
     select right(comment, len(comment) - charindex('id ', comment)-2) as justnumber 
     from @testtable) TT 

Я также добавьте, что этот подход более основан на основе и, следовательно, более эффективен для совокупности значений данных. Но очень просто сделать это только для одного значения как переменной. Вместо использования комментария столбца вы можете использовать переменную типа @chvComment.

0

не имеют средств, чтобы проверить это на данный момент, но:

select convert(int, substring(fieldName, len('activation successful of id '), len(fieldName) - len('activation successful of id '))) from tableName 
0

Если строка комментария ТОЧНО, как это, вы можете использовать замену.

select replace(comment_col, 'activation successful of id ', '') as id from .... 

Это почти наверняка не будет - как насчет неудачных Активаций? Вы можете в конечном итоге с вложенными заменить заявления

select replace(replace(comment_col, 'activation not successful of id ', ''), 'activation successful of id ', '') as id from .... 

[извините, не могу сказать, с этого экрана редактирования, если это полностью действительный SQL]

Это начинает запутаться; вы можете подумать о создании функции и поместить в нее операторы replace.

Если это одноразовая работа, это не имеет большого значения. Вы также можете использовать регулярное выражение, но это довольно медленно (и в любом случае означает, что у вас теперь есть 2 проблемы).

0

Не могли бы вы написать немного кода? Один из вариантов, создайте функцию CLR User Defined, затем используйте Regex. Вы можете найти более подробную информацию here. Это будет обрабатывать сложные строки.

Если выше строка всегда отформатирован как «активация успешной ид #######», с номером в конце поля, то:

declare @myColumn varchar(100) 
set @myColumn = 'activation successful of id 1010102' 


SELECT 
    @myColumn as [OriginalColumn] 
, CONVERT(int, REVERSE(LEFT(REVERSE(@myColumn), CHARINDEX(' ', REVERSE(@myColumn))))) as [DesiredColumn] 

даст вам:

OriginalColumn       DesiredColumn 
---------------------------------------- ------------- 
activation successful of id 1010102  1010102 

(1 row(s) affected) 
0
CAST(REVERSE(LEFT(REVERSE(@Test),CHARINDEX(' ',REVERSE(@Test))-1)) AS INTEGER) 
0
select cast(right(column_name,charindex(' ',reverse(column_name))) as int)