Текущий архив: 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