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

Откуда: Оклахома Пригород Колымы
Сообщений: 898
Наверно лучше новая тема..
начало тут Распарсить строку
сразу уточню
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 1)


спасибо Minamoto , но увы, код
SELECT a num, cast(left(case when CHARINDEX('-', t1) > 0 then substring(t1, 1, charindex('-', t1)-1) else t1 end, 4) as int) val
from (SELECT 1 a, '1695' t1 UNION
      select 2 a,'00226-3' union
      select 3 a, '03264' union 
      SELECT 4 a,'000400-2' union 
      SELECT 5 a,'05303' union 
      SELECT 6 a,'006282' union 
      SELECT 7 a,'7441-1' union 
      SELECT 8 a,'8441-2' UNION
      SELECT 9 a,'94650' union 
      SELECT 10 a,'2534-2' union 
      SELECT 11 a,'2534-1' union 
      SELECT 12 a,'25340-5' union 
      SELECT 13 a,'01-5' union 
      SELECT 14 a,'010-4'
  ) t order BY 1

возвращает:
numval
11695
222
3326
44
5530
662
77441
88441
99465
102534
112534
122534
131
1410

т.е. 2,3,4 и т.д. позиции не верны: 2 -> 22 но правильно 226
24 июн 14, 10:41    [16210385]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
поиском вопользуйтесь- тема 500 раз обсуждлалась
24 июн 14, 10:42    [16210395]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 898
Maxx
поиском вопользуйтесь- тема 500 раз обсуждлалась

угу, спасибо, я то сразу, тупо новую тему, даже по ссылке выше не читал ничего.
24 июн 14, 10:45    [16210419]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 898
Смысл еще в том, что сее работает в автоматическом режиме каждые 10 сек, получает набор 1-50 записей, и пишет в другое место. Вот и не очень хочется писать UDL или свои функции посимвольной обработки.
24 июн 14, 10:53    [16210482]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
stells2, да, моя ошибка, не обратил внимания, что сначала нули обрезаются, а потом уж до 4-х знаков обрезка.

select a num, left(cast(cast(case when CHARINDEX('-', t1) > 0 then substring(t1, 1, charindex('-', t1)-1) else t1 end as int) as varchar(max)), 4)
from (SELECT 1 a, '1695' t1 UNION
      select 2 a,'00226-3' union
      select 3 a, '03264' union 
      SELECT 4 a,'000400-2' union 
      SELECT 5 a,'05303' union 
      SELECT 6 a,'006282' union 
      SELECT 7 a,'7441-1' union 
      SELECT 8 a,'8441-2' UNION
      SELECT 9 a,'94650' union 
      SELECT 10 a,'2534-2' union 
      SELECT 11 a,'2534-1' union 
      SELECT 12 a,'25340-5' union 
      SELECT 13 a,'01-5' union 
      SELECT 14 a,'010-4'
  ) t order BY 1
24 июн 14, 10:55    [16210500]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
stells2,

SELECT a num, cast(left(case when CHARINDEX('-', t1) > 0 then substring(t1, 1, charindex('-', t1)-1) else t1 end, LEN(t1)) as int) val
24 июн 14, 10:57    [16210506]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 898
cast(RIGHT(case when CHARINDEX('-', t1) > 0 then substring(t1, 1, charindex('-', t1)-1) else t1 end, 4) as int)

замена на RIGHT решает ошибку но рождает новую - в позиции 9, на входе 94650
следовательно надо взять первые 4 = 9465, но возвращает 4650
24 июн 14, 11:00    [16210525]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
stells2
Member

Откуда: Оклахома Пригород Колымы
Сообщений: 898
Minamoto
stells2, да, моя ошибка, не обратил внимания, что сначала нули обрезаются, а потом уж до 4-х знаков обрезка.

:)
отлично! Спасибо.
Maxx , так же спасибо. Там только малость обрезать надо что бы 4 символа было.
24 июн 14, 11:04    [16210540]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить строку в 4-х значное число  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
stells2
Там только малость обрезать надо что бы 4 символа было.

сорри не заметил
24 июн 14, 11:05    [16210553]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить