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

Откуда:
Сообщений: 3
Есть таблица T1, со столбцом C1, в ней строки с содержимым V1[S4], V2[S5], V3[S6] и тд.

Нужно написать Select, чтоб в результате получился так же один столбец, а строки содержали V1, V2, V3 и тд. Тоесть без содержимого в [ ] и без самих скобок.

Порекомендуйте пожалуйста как реализовать.
Заранее благодарю.
18 окт 13, 15:02    [14998686]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37225
Спросите у того, кто придумал такую структуру данных.
18 окт 13, 15:04    [14998698]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Mikhail Alexandrovich
Есть таблица T1, со столбцом C1, в ней строки с содержимым V1[S4], V2[S5], V3[S6] и тд.

Нужно написать Select, чтоб в результате получился так же один столбец, а строки содержали V1, V2, V3 и тд. Тоесть без содержимого в [ ] и без самих скобок.
См. функции LEFT и CHARINDEX
18 окт 13, 15:06    [14998714]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
Mikhail Alexandrovich
Member

Откуда:
Сообщений: 3
alexeyvg, спасибо. Частично вопрос решен.

Решение:
+

Fullnarative - исходные значения
narative -обрезанные.

DECLARE @Narative VARCHAR(MAX)
SET @Narative=(SELECT SUBSTRING( @FullNarative, 0, CHARINDEX('[', @FullNarative)))
select @Narative
18 окт 13, 16:55    [14999517]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Mikhail Alexandrovich
alexeyvg, спасибо. Частично вопрос решен.

Решение:
DECLARE @Narative VARCHAR(MAX)
SET @Narative=(SELECT SUBSTRING( @FullNarative, 0, CHARINDEX('[', @FullNarative)))
select @Narative
Какая то нетрадиционная запись, и в количестве символов ошиблись. Вы же говорите, что есть таблица T1, со столбцом C1?

Тогда:

SELECT SUBSTRING( C1, 1, CHARINDEX('[', C1) - 1))  as Narative
FROM T1
-- или
SELECT LEFT( C1, CHARINDEX('[', C1) - 1))  as Narative
FROM T1
18 окт 13, 23:21    [15001048]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
Mikhail Alexandrovich
Member

Откуда:
Сообщений: 3
alexeyvg,
Решение уже прикладное.
Переменная FullNarative это входных значения типа V1[S4], V2[S5], V3[S6] где vX неизвестное количество символов. S6 тоже определеный текст.
Narative это "обрезанный" FullNarative.

Как я уже сказал, вопрос решен частично.

Оказалось что у меня есть такие входные значения, которые имеют вид:
[S1]V1[S2] -(где S1,V1,S2 определенный текст.

Или еще хуже
[S1]V1[S2]V2[S3]V3
Так что я ошибочно полагал что SUBSTRING в этом деле применим.
....

Я заранее знаю все возможные S1,S2,S3. Как можно сделать так, чтоб в случае если входные данные имеют вид " Hello [name], have a nice day!" , можно былоб заменить [name] на что нибудь статичное, типа пробела или цифры 1 скажем:?
21 окт 13, 10:32    [15006594]     Ответить | Цитировать Сообщить модератору
 Re: Простой SELECT.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Mikhail Alexandrovich
Так что я ошибочно полагал что SUBSTRING в этом деле применим.

Применим.
Просто его придется применять в цикле.
21 окт 13, 10:38    [15006624]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить