Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

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]
пример в студию:)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо