Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
Здравствуйте. Я учусь на втором курсе и SQL мы начали изучать только в этом полугодии.
И вот в одной лабораторной такой запрос: для поля оставить только текст, без цифр.
Что с этим делать? Помогите мне пожалуйста.
Я в растерянности.
6 май 13, 20:53    [14264689]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Я учусь на втором курсе и SQL мы начали изучать только в этом полугодии.


Полугодие уже скоро закончиться - т.е. срок уже приличный.

автор
И вот в одной лабораторной такой запрос: для поля оставить только текст, без цифр.


К лабам обычно прилагается методичка, с вариантами решения "аналогичных задач".

автор
Что с этим делать?


А что пробовали делать? Какой вариант Вы написали и он не дает правильного результата?
6 май 13, 21:08    [14264713]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
pkarklin,
У нас было очень тяжелое полугодие: вышли мы в феврале, весь март были проверки.
Из 14 примеров есть только один сильно отдаленно похож на то что надо:
"Вывести фамилии работников таким образом, что бы большой была только первая буква фамилии"
6 май 13, 21:22    [14264737]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
amataw,

Сколько у нас всего цифр? С функцией REPLACE знакомы?
6 май 13, 21:38    [14264760]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
pkarklin, знакомы. Но не на высшем уровне =(
Вот пример. В поле "Единицы Измерения" нужно оставить только буквы без цифр.

К сообщению приложен файл. Размер - 74Kb
6 май 13, 21:49    [14264785]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
amataw,

Вы не в cилах написать 10 вложенных REPLACE?
6 май 13, 21:53    [14264794]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
pkarklin, в силах.
А есть еще какие то способы? Просто интересно.
6 май 13, 21:55    [14264805]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
amataw
А есть еще какие то способы? Просто интересно.
сделать сборку на C# позволяющую юзать регулярки из SQL
но я думал Вам срочно...
6 май 13, 21:58    [14264812]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
Паганель, да. Мне интересно просто.В дальнейшем пригодиться)
6 май 13, 21:59    [14264816]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
amataw,

Их великое множество. От написания функции на T-SQL, до регулярных выражений на CLR сборках.
6 май 13, 22:01    [14264823]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
pkarklin, понял.
Спасибо, Вам большое.
6 май 13, 22:03    [14264829]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
andy_111
Member

Откуда: Москва
Сообщений: 39
Ну если дело совсем труба и показать нечего, то например вот так можно.
CREATE FUNCTION REPLACE_DATA(@DATA VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @N INT, @S2 VARCHAR(100)
SET @N = 0
SET @S2 = ''
/*
Все просто - цифры имеют ASCII коды с 48 по 57. В цикле перебираем переданную строку, копируя в 
переменную-результат только те символы, ASCII коды которых не входят в указанный диапазон.
*/
WHILE @N < LEN(@DATA)
BEGIN	
	IF ASCII(SUBSTRING(@DATA,@N,1)) < 48 OR ASCII(SUBSTRING(@DATA,@N,1)) > 57 
		SET @S2	 = @S2 + SUBSTRING(@DATA,@N,1)		
	SET @N += 1
END
RETURN  (@S2)
END

--Используем так 
SELECT dbo.REPLACE_DATA('5tb1234567890D3DF2343')
--Результат
tbDDF


Слабое место - указание длины переменных типа VARCHAR. В идеале она должна быть максимальной, чтобы обработать можно было любые строки.
7 май 13, 10:07    [14265838]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
andy_111
Member

Откуда: Москва
Сообщений: 39
Сорри, небольшое уточнение :
WHILE @N < LEN(@DATA)

заменить на
WHILE @N <= LEN(@DATA)
7 май 13, 10:09    [14265851]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
andy_111
Member

Откуда: Москва
Сообщений: 39
И еще одно. Заменить
SET @N = 0

на
SET @N = 1


Но это не принципиально, работать будет и в старом варианте. Просто правильнее так.

Сорри, спешил.
7 май 13, 10:12    [14265874]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
andy_111
И еще одно. Заменить
SET @N = 0


на
SET @N = 1



Но это не принципиально, работать будет и в старом варианте. Просто правильнее так.

Сорри, спешил.
Правильнее десять вложенных REPLACEов.
И быстрее в 100500 раз.
7 май 13, 10:36    [14266046]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
да аффтар лабу уже сдал наверное
7 май 13, 10:37    [14266061]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
andy_111
Member

Откуда: Москва
Сообщений: 39
Ну да, REPLACE быстрее будет конечно же. Типа так

DECLARE @V VARCHAR(100)
SET @V = '1a1234567890sdk7'
PRINT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@V,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','')
7 май 13, 11:31    [14266471]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста. Очень Срочно!!!  [new]
amataw
Member

Откуда:
Сообщений: 7
andy_111, спасибо Вам большое за помощь =)
7 май 13, 19:29    [14269933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить