![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
удаление из строки всех букв MS SQL 2000
stud © (2005-08-18 10:15:00)необходимо удалить из строки все буквы
как это можно реализвать и возможно ли?
Anatoly Podgoretsky (2005-08-18 16:49:00) [1]Только в потрепаться, поскольку в другие тоже нельзя, это безобразие и вероятно оплаченое.
Игорь Шевченко (2005-08-18 16:35:00) [2]stud © (18.08.05 15:45) [27]
Это тогда вопрос не в "Базы данных", потому что базой данных это назвать трудно.
stud (2005-08-18 16:27:00) [3]
> Писали говоришь, вот теперь пусть переписывают.
)))))))) ан переписывать-то мне
Anatoly Podgoretsky (2005-08-18 16:19:00) [4]Писали говоришь, вот теперь пусть переписывают.
stud (2005-08-18 15:45:00) [5]
> Игорь Шевченко © (18.08.05 14:56) [25] [Новое
> сообщение][Ответить]
это круче, это примерно как из простоквашино писали письмо родителям дяди федора, каждый свои мысли.
а так как нужных полей изначально не завели, то писали все в варчар кому как нравится а теперь угадывай что здесь где
paul_k (2005-08-18 15:37:00) [6]Игорь Шевченко © (18.08.05 14:56) [25]
Или очередной "универсальный импорт"
Игорь Шевченко (2005-08-18 14:56:00) [7]Это наверное база в минус первой нормальной форме - сначала туда всякий мусор загоняется, а потом чешется репа - что же с этим мусором можно полезного сделать. Я угадал ?
sniknik (2005-08-18 13:48:00) [8]> то очень непросто (скорее невозможно) есть такие суммы
> ...
пока что ничего невозможного не вижу (по приведенным примерам, у всех есть общее), в примере (том же) не надо делать проверку на точку, надо после операции отсеч два нуля в конце. и все. либо полученное в результате число делить на 100.
Ega23 (2005-08-18 13:38:00) [9]2 sniknik © (18.08.05 12:08) [14]
Про ASCII забыл....
stud (2005-08-18 12:51:00) [10]
> это удалило не только все буквы но и 2 цифры в конце,
> итого получилось "10000."
это при вычислении длины подстроки происходит нужно просто +2 добавить
получить-то нужно число - денги)) только исходя из того что забито в базу - это очень непросто (скорее невозможно) есть такие суммы
1,000,235,255.00 а есть такие
1.000.235.255,00 вот так, а есть 100 253 =00
sniknik (2005-08-18 12:41:00) [11]stud © (18.08.05 12:35) [20]
и тебе нужно получить именно число? (а не удалить все буквы) добавь к моему примеру проверк на точку и это тоже пройдет.
хуже если 'xxx124xxx6253xxx2', "сливать" или выбирать, какое?
stud (2005-08-18 12:35:00) [12]никаких гарантий, но посреди числа быть ничего лишнего не должно.
все предусмотреть не возможно. просто наследство такое досталось
есть такие числа 1,000,235,255.00
sniknik (2005-08-18 12:34:00) [13]stud © (18.08.05 12:16) [15]
на твоем же примере > ХХХ___10000.00ХХХ;.....
это удалило не только все буквы но и 2 цифры в конце, итого получилось "10000." (решение не соответствует вопросу)
Nikolay M. (2005-08-18 12:25:00) [14]
> stud © (18.08.05 12:23) [17]
> т.е. отсекаются все буквы слева и справа и остается то что
> посередине))
А вот про это не было ни слова. Есть гарантия того, что в середине будет обязательно стоять число, а по бокам - только буквы?
stud (2005-08-18 12:23:00) [15]т.е. отсекаются все буквы слева и справа и остается то что посередине))
k2 (2005-08-18 12:18:00) [16]to stud © (18.08.05 12:16) [15]
ух ты :)
stud (2005-08-18 12:16:00) [17]в общем получилось так :
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)))
sniknik (2005-08-18 12:08:00) [18]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
k2 (2005-08-18 12:07:00) [19]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
paul_k (2005-08-18 11:52:00) [20]k2 © (18.08.05 11:35) [10]
пример в студию:)