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

Откуда:
Сообщений: 214
Помогите пожалуйста. Как удалить только у чисел в кавычках запятую?
Было 1,08052014,Ordin,29.1140,5,12.00,""(3,457.6)"",""(1,507.57)"",UD,1.00,0.00,""1,495.57""
После 1,08052014,Ordin,29.1140,5,12.00,""(3457.6)"",""(1507.57)"",UD,1.00,0.00,""1495.57""
8 ноя 14, 17:51    [16816507]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
AlexPiv
Member

Откуда:
Сообщений: 214
Нужно сделать замену в строке.
8 ноя 14, 17:55    [16816512]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Напишите хранимую процедуру, выполняющую требуемое действие.
Для написания же статического запроса требуется известное максимально возможное количество таких "чисел в кавычках" в поле. Плюс гарантированная структурированность данных
8 ноя 14, 18:01    [16816520]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
DECLARE @string VARCHAR(87)

SET @string = '1,08052014,Ordin,29.1140,5,12.00,""(3,457.6)"",""(1,507.57)"",UD,1.00,0.00,""1,495.57""'

SET @string = REPLACE(@string, '(1,', '(1')
SET @string = REPLACE(@string, '"1,', '"1')
SET @string = REPLACE(@string, '(3,', '(3')

PRINT @string
8 ноя 14, 18:01    [16816521]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
AlexPiv
Member

Откуда:
Сообщений: 214
skyANA
DECLARE @string VARCHAR(87)

SET @string = '1,08052014,Ordin,29.1140,5,12.00,""(3,457.6)"",""(1,507.57)"",UD,1.00,0.00,""1,495.57""'

SET @string = REPLACE(@string, '(1,', '(1')
SET @string = REPLACE(@string, '"1,', '"1')
SET @string = REPLACE(@string, '(3,', '(3')

PRINT @string


Строк в которых нужно заменить запятую очень много, числа разные. Писать все варианты очень долго. Замена нужна только чисел в кавычках. Как можно сделать замену запятой быстрей?
Например строка может быть такой:
SET @string = '1,08052014,Ordin,29.1140,5,12.00,""(356,457.6)"",""(674,507.57)"",UD,1.00,0.00,""42,469,495.57""'
9 ноя 14, 12:15    [16817921]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
aleks2
Guest
Как-то так:

declare @string nvarchar(1024)
set @string = '1,08052014,Ordin,29.1140,5,12.00,""(356,457.6)"",""(674,507.57)"",UD,1.00,0.00,""42,469,495.57""' 

select @string;

;with
q as (select SUBSTRING(@string, Number, 2) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n 
        where SUBSTRING(@string, Number, 2) = '""' and Number <= LEN(@string))
,
qq as (select q1.Number as Number1, q2.Number as Number2 
         from (select *from q where n%2 = 1 ) as q1 
              inner join (select * from q where n%2 = 0 ) as q2
              on  (q1.n - 1)/2 = (q2.n - 1)/2
       )
,       
p as (select SUBSTRING(@string, Number, 1) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n inner join qq on Number between qq.Number1+2 and qq.Number2-1
        where SUBSTRING(@string, Number, 1) = ',' and Number <= LEN(@string)
   )

select @string = STUFF(@string, Number, 1, '') from p order by Number desc;

select @string;


Из этого можно сделать скалярную функцию.
9 ноя 14, 13:33    [16818013]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
AlexPiv
skyANA
DECLARE @string VARCHAR(87)

SET @string = '1,08052014,Ordin,29.1140,5,12.00,""(3,457.6)"",""(1,507.57)"",UD,1.00,0.00,""1,495.57""'

SET @string = REPLACE(@string, '(1,', '(1')
SET @string = REPLACE(@string, '"1,', '"1')
SET @string = REPLACE(@string, '(3,', '(3')

PRINT @string


Строк в которых нужно заменить запятую очень много, числа разные. Писать все варианты очень долго. Замена нужна только чисел в кавычках. Как можно сделать замену запятой быстрей?
Например строка может быть такой:
SET @string = '1,08052014,Ordin,29.1140,5,12.00,""(356,457.6)"",""(674,507.57)"",UD,1.00,0.00,""42,469,495.57""'
Ну как как.
Любая функция представляется либо таблицей переходов, либо формулой (алгоритмом).

Если первое Вам не подходит, то aleks2 предложил второе :)
9 ноя 14, 14:20    [16818095]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
AlexPiv
Member

Откуда:
Сообщений: 214
aleks2
Как-то так:

declare @string nvarchar(1024)
set @string = '1,08052014,Ordin,29.1140,5,12.00,""(356,457.6)"",""(674,507.57)"",UD,1.00,0.00,""42,469,495.57""' 

select @string;

;with
q as (select SUBSTRING(@string, Number, 2) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n 
        where SUBSTRING(@string, Number, 2) = '""' and Number <= LEN(@string))
,
qq as (select q1.Number as Number1, q2.Number as Number2 
         from (select *from q where n%2 = 1 ) as q1 
              inner join (select * from q where n%2 = 0 ) as q2
              on  (q1.n - 1)/2 = (q2.n - 1)/2
       )
,       
p as (select SUBSTRING(@string, Number, 1) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n inner join qq on Number between qq.Number1+2 and qq.Number2-1
        where SUBSTRING(@string, Number, 1) = ',' and Number <= LEN(@string)
   )

select @string = STUFF(@string, Number, 1, '') from p order by Number desc;

select @string;


Из этого можно сделать скалярную функцию.


Напишите пожалуйста какие данные указаны в таблице Numbers?
10 ноя 14, 11:48    [16821393]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
AlexPiv
aleks2
Как-то так:

declare @string nvarchar(1024)
set @string = '1,08052014,Ordin,29.1140,5,12.00,""(356,457.6)"",""(674,507.57)"",UD,1.00,0.00,""42,469,495.57""' 

select @string;

;with
q as (select SUBSTRING(@string, Number, 2) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n 
        where SUBSTRING(@string, Number, 2) = '""' and Number <= LEN(@string))
,
qq as (select q1.Number as Number1, q2.Number as Number2 
         from (select *from q where n%2 = 1 ) as q1 
              inner join (select * from q where n%2 = 0 ) as q2
              on  (q1.n - 1)/2 = (q2.n - 1)/2
       )
,       
p as (select SUBSTRING(@string, Number, 1) as chr, Number, ROW_NUMBER() over(order by Number) n
        from Numbers n inner join qq on Number between qq.Number1+2 and qq.Number2-1
        where SUBSTRING(@string, Number, 1) = ',' and Number <= LEN(@string)
   )

select @string = STUFF(@string, Number, 1, '') from p order by Number desc;

select @string;



Из этого можно сделать скалярную функцию.


Напишите пожалуйста какие данные указаны в таблице Numbers?
Целые числа от 0 до миллиона!
10 ноя 14, 11:58    [16821468]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
AlexPiv,

А вы не хотите это нормально распарзить под SSIS?
10 ноя 14, 13:54    [16822280]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
AlexPiv
Member

Откуда:
Сообщений: 214
a_voronin
AlexPiv,

А вы не хотите это нормально распарзить под SSIS?


Нет
10 ноя 14, 17:33    [16824099]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить только у чисел в кавычках запятую?  [new]
AlexPiv
Member

Откуда:
Сообщений: 214
iap
AlexPiv
пропущено...


Напишите пожалуйста какие данные указаны в таблице Numbers?
Целые числа от 0 до миллиона!


Все работает, большое всем спасибо.
10 ноя 14, 17:34    [16824104]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить