powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / разделить один столбец на несколько
7 сообщений из 7, страница 1 из 1
разделить один столбец на несколько
    #40092941
Arina54628
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
у меня есть столбец Price, который содержит диапазон цен
значения в этом столбце указываются через двоеточие, например 100.0:5000.0

хочу разделить этот столбец на два - MinPrice и MaxPrice
подскажите, пожалуйста, какую функцию можно использовать?
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40092944
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arina54628,

CHARINDEX
LEFT
RIGHT
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40092945
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arina54628,

:)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @Price TABLE (Id int, sprice varchar(100))
INSERT @Price VALUES (1, '100.0:5000.0'), (2, '200.45:750.1')

;WITH CTE AS
(
SELECT *
FROM @Price
OUTER APPLY
(
SELECT *, 
       ROW_NUMBER() OVER(ORDER BY 1 / 0) AS rn
  FROM STRING_SPLIT(sprice, ':')
) c
)
SELECT Id, TRY_CONVERT(DECIMAL(19,2), [1]) as Price1, TRY_CONVERT(DECIMAL(19,2), [2]) as Price2
FROM (SELECT Id, rn, value FROM cte) a
PIVOT (MAX(value) FOR rn in ([1],[2])) pvt


Id          Price1                                  Price2
----------- --------------------------------------- ---------------------------------------
1           100.00                                  5000.00
2           200.45                                  750.10
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40092948
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arina54628,

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @Price TABLE (Id int, sprice varchar(100))
INSERT @Price VALUES (1, '100.0:5000.0'), (2, '200.45:750.1'), (3, ':22.33')

SELECT Id, 
       TRY_CONVERT(DECIMAL(19,2), SUBSTRING(sprice, 1, CHARINDEX(':', sprice) - 1)) Price1,
       TRY_CONVERT(DECIMAL(19,2), SUBSTRING(sprice, CHARINDEX(':', sprice) + 1, LEN(sprice))) Price2
  FROM @Price



Если завтра окажется, что храниться будет не 2, а 22 числа так, то с Пивотом более проще масштабировать будет. И читабильнее
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40092952
Arina54628
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL, спасибо большое!

может, знаете, как то же самое сделать не в ms sql, а в vertica?
функции TRY_CONVERT в вертике нет
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40092965
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arina54628
Oleg_SQL, спасибо большое!

может, знаете, как то же самое сделать не в ms sql, а в vertica?
функции TRY_CONVERT в вертике нет


а просто CONVERT? В конце концов вообще без преобразования попробуйте ))



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT Id, 
       CONVERT(DECIMAL(19,2), SUBSTRING(sprice, 1, CHARINDEX(':', sprice) - 1)) Price1,
       CONVERT(DECIMAL(19,2), SUBSTRING(sprice, CHARINDEX(':', sprice) + 1, LEN(sprice))) Price2
  FROM @Price

или

SELECT Id, 
       SUBSTRING(sprice, 1, CHARINDEX(':', sprice) - 1) Price1,
       SUBSTRING(sprice, CHARINDEX(':', sprice) + 1, LEN(sprice)) Price2
  FROM @Price
...
Рейтинг: 0 / 0
разделить один столбец на несколько
    #40093051
Arina54628
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для Vertica подходит функция SPLIT_PART

Код: sql
1.
2.
CAST(SPLIT_PART(price,':',1) as float) minPrice
CAST(SPLIT_PART(price,':',2) as float) maxPrice
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / разделить один столбец на несколько
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]