Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

удаление из строки всех букв MS SQL 2000   Найти похожие ветки 

 
stud ©   (2005-08-18 10:15) [0]

необходимо удалить из строки все буквы
как это можно реализвать и возможно ли?


 
atruhin ©   (2005-08-18 10:17) [1]

update ... set stroka = ""


 
stud ©   (2005-08-18 10:36) [2]

??? и что получится?? мне не нужно очищать строку.
строка помимо букв может содержать еще и цифры, вот только цифры и надо оставить


 
Nikolay M. ©   (2005-08-18 10:47) [3]

Как насчет открыть в БОЛ раздел String Functions?


 
stud ©   (2005-08-18 10:57) [4]


> Как насчет открыть в БОЛ раздел String Functions?

не поверите открыт, но не получается.
есть строка неопределенной длины и структуры (это в расчет не брать). в ней есть нечто похожее на
ХХХ___10000.00ХХХ;.....
где Х - буквы - необходимо их удалить и оставить только цифры, которые затем преобразовать в число. нужную часть строки я "выкусываю" но удалить буквы пока не получается, потомучто сочетание букв может быть произволное, строковые функции, описанные в БОЛ не позволяют работать с символами подстановки (по крайней мере я не нашел этого)- что-то типа [A-z]как при использовании like


 
Nikolay M. ©   (2005-08-18 11:15) [5]


> функции, описанные в БОЛ не позволяют работать с символами
> подстановки

А REPLACE тогда для чего?


 
paul_k ©   (2005-08-18 11:16) [6]

Nikolay M. ©   (18.08.05 11:15) [5]
ну и substring до кучи


 
stud ©   (2005-08-18 11:20) [7]

а пример использования replace дляудаления букв можно?
select replace ("asfad 100",[a-z],"")
не работает (и не должно вроде)


 
Nikolay M. ©   (2005-08-18 11:28) [8]


> paul_k ©   (18.08.05 11:16) [6]
> ну и substring до кучи

То же самое, вид сбоку :)))


> stud ©   (18.08.05 11:20) [7]
> а пример использования replace дляудаления букв можно?
> select replace ("asfad 100",[a-z],"")
> не работает (и не должно вроде)

Не должно.
select replace ("asfad 100","a","")


 
stud ©   (2005-08-18 11:34) [9]


> select replace ("asfad 100","a","")

вот и я о том же, заменить КОНКРЕТНОЕ сочетание символов не проблема, а удалить ВСЕ буквы?


 
k2 ©   (2005-08-18 11:35) [10]

isnumeric ещё можно попользовать


 
Ega23 ©   (2005-08-18 11:50) [11]


if exists (select * from sysobjects where id = object_id(N"[S_TempProc]") and OBJECTPROPERTY(id, N"IsProcedure") = 1)
drop procedure [S_TempProc]
GO
CREATE PROCEDURE S_TempProc
@aStr varchar(8000)

As

Select @aStr=Upper(@aStr)
Select @aStr=Replace(@aStr, "А", "")
Select @aStr=Replace(@aStr, "Б", "")
Select @aStr=Replace(@aStr, "В", "")
.....
Select @aStr=Replace(@aStr, "Я", "")

Select Result=@aStr
return(0)

GO



?


 
paul_k ©   (2005-08-18 11:52) [12]

k2 ©   (18.08.05 11:35) [10]
пример в студию:)


 
k2 ©   (2005-08-18 12:07) [13]

to paul_k ©   (18.08.05 11:52) [12]
опыта у меня нету :), ужасно выглядит но вроде работает

declare @str varchar(30), @str1 varchar(30), @pos int, @ch varchar(1)
set @str = "sadf324sfdg345"
set @str1 = @str
SET @pos = 1
WHILE @pos <= DATALENGTH(@str)
  BEGIN
    select @ch = SUBSTRING(@str, @pos, 1)
    if ISNUMERIC(@ch)=0
      begin    
      select @str1 = replace(@str1, @ch, "")  
      print @str1    
      end  
    SET @pos = @pos + 1
  END


 
sniknik ©   (2005-08-18 12:08) [14]

Ega23 ©   (18.08.05 11:50) [11]
грубо (с смысле изящьнее нада быть изящьнее ;). так проще (короче точно)

DECLARE @pos int, @st char(30), @sres varchar(30), @ch char(1)
SET @pos = 1
SET @st = "ХХХ___10000.00ХХХ;....."
SET @sres = ""
WHILE @pos <= DATALENGTH(@st)BEGIN
 SET @ch = SUBSTRING(@st, @pos, 1)
 IF ASCII(@ch) >= 48 AND ASCII(@ch) <= 57  
   SET @sres = @sres + @ch
 SET @pos = @pos + 1
END
SELECT @sres


 
stud ©   (2005-08-18 12:16) [15]

в общем получилось так :
substring ((substring(contracts.comment,1,patindex("%;%",contracts.comment)-1)), patindex("%[0-9]%",(substring(contracts.comment,1,patindex("%;%",contracts.comment)-1))),
 len((substring(contracts.comment,1,patindex("%;%",contracts.comment)-1)))- patindex("%[0-9]%",reverse((substring(contracts.comment,1,patindex("%;%",contracts.comment)-1))))-patindex("%[0-9]%",(su bstring(contracts.comment,1,patindex("%;%",contracts.comment)-1)))


 
k2 ©   (2005-08-18 12:18) [16]

to stud ©   (18.08.05 12:16) [15]
ух ты :)


 
stud ©   (2005-08-18 12:23) [17]

т.е. отсекаются все буквы слева и справа и остается то что посередине))


 
Nikolay M. ©   (2005-08-18 12:25) [18]


> stud ©   (18.08.05 12:23) [17]
> т.е. отсекаются все буквы слева и справа и остается то что
> посередине))

А вот про это не было ни слова. Есть гарантия того, что в середине будет обязательно стоять число, а по бокам - только буквы?


 
sniknik ©   (2005-08-18 12:34) [19]

stud ©   (18.08.05 12:16) [15]
на твоем же примере > ХХХ___10000.00ХХХ;.....
это удалило не только все буквы но и 2 цифры в конце, итого получилось "10000." (решение не соответствует вопросу)


 
stud ©   (2005-08-18 12:35) [20]

никаких гарантий, но посреди числа быть ничего лишнего не должно.
все предусмотреть не возможно. просто наследство такое досталось
есть такие числа 1,000,235,255.00


 
sniknik ©   (2005-08-18 12:41) [21]

stud ©   (18.08.05 12:35) [20]
и тебе нужно получить именно число? (а не удалить все буквы) добавь к моему примеру проверк на точку и это тоже пройдет.

хуже если "xxx124xxx6253xxx2", "сливать" или выбирать, какое?


 
stud ©   (2005-08-18 12:51) [22]


> это удалило не только все буквы но и 2 цифры в конце,
> итого получилось "10000."

это при вычислении длины подстроки происходит нужно просто +2 добавить
получить-то нужно число - денги)) только исходя из того что забито в базу - это очень непросто (скорее невозможно) есть такие суммы
1,000,235,255.00 а есть такие
1.000.235.255,00 вот так, а есть 100 253 =00


 
Ega23 ©   (2005-08-18 13:38) [23]

2 sniknik ©   (18.08.05 12:08) [14]

Про ASCII забыл....


 
sniknik ©   (2005-08-18 13:48) [24]

> то очень непросто (скорее невозможно) есть такие суммы
> ...
пока что ничего невозможного не вижу (по приведенным примерам, у всех есть общее), в примере (том же) не надо делать проверку на точку, надо после операции отсеч два нуля в конце. и все. либо полученное в результате число делить на 100.


 
Игорь Шевченко ©   (2005-08-18 14:56) [25]

Это наверное база в минус первой нормальной форме - сначала туда всякий мусор загоняется, а потом чешется репа - что же с этим мусором можно полезного сделать. Я угадал ?


 
paul_k ©   (2005-08-18 15:37) [26]

Игорь Шевченко ©   (18.08.05 14:56) [25]
Или очередной "универсальный импорт"


 
stud ©   (2005-08-18 15:45) [27]


> Игорь Шевченко ©   (18.08.05 14:56) [25] [Новое
> сообщение][Ответить]

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


 
Anatoly Podgoretsky ©   (2005-08-18 16:19) [28]

Писали говоришь, вот теперь пусть переписывают.


 
stud ©   (2005-08-18 16:27) [29]


> Писали говоришь, вот теперь пусть переписывают.

)))))))) ан переписывать-то мне


 
Игорь Шевченко ©   (2005-08-18 16:35) [30]

stud ©   (18.08.05 15:45) [27]

Это тогда вопрос не в "Базы данных", потому что базой данных это назвать трудно.


 
Anatoly Podgoretsky ©   (2005-08-18 16:49) [31]

Только в потрепаться, поскольку в другие тоже нельзя, это безобразие и вероятно оплаченое.



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.041 c
1-1126014139
DeadMoroz
2005-09-06 17:42
2005.10.02
dxDBGrd1.SelectedNodes


1-1126019229
Relaxxx
2005-09-06 19:07
2005.10.02
2 вопроса:разделитель дробной части и popupMenu не закрывать по


4-1123156568
grigory
2005-08-04 15:56
2005.10.02
Не удается выполнить исходящий вызов...


4-1123505386
dima1234
2005-08-08 16:49
2005.10.02
Серийный номер диска


14-1126184463
Prohodil Mimo
2005-09-08 17:01
2005.10.02
Кто может помоч с приобретенийем мыши?