Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
Glory
Виртуальные - это которые в воображении что ли существуют ?


как в оракле apex
http://apex.oracle.com/pls/otn/f?p=4700:1:3713905407451993:::::
12 авг 11, 22:01    [11112994]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap
UPDATE T2 SET
 Тип_товара=LTRIM(U.Тип_товара)
,Номер_товара=LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%',U.НомерНазвание),0)-1),U.НомерНазвание))
,Название_товара=LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE(U.НомерНазвание)),0)-1),'')))
FROM Table2 T2
JOIN
(
 SELECT
  ID,
  ISNULL(LEFT(Наименование, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1),Наименование)[Тип_товара],
  ISNULL(STUFF(Наименование,1, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1,''),'')[НомерНазвание]
 FROM
 (
  SELECT
   ID,
   REPLACE(REPLACE(Наименование,'№',''),'"','')[Наименование]
  FROM Table1
 ) T
) U
ON T2.ID=U.ID;
Разбирайтесь с Игрушкой-Танком!


Спасибо. мой СКЛ экспрес при выполненияя выдает. Что-то не поддерживает Експерсс или что?
12 авг 11, 22:23    [11113071]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
автор
Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.
12 авг 11, 22:23    [11113073]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова
Glory
Виртуальные - это которые в воображении что ли существуют ?


как в оракле apex
http://apex.oracle.com/pls/otn/f?p=4700:1:3713905407451993:::::

И что же в apex-е виртуального ?
"Oracle Application Express installs as a part of the seed database installation with Oracle Database 11g"
12 авг 11, 23:00    [11113206]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
Glory
Ольга Семенова
пропущено...


как в оракле apex
http://apex.oracle.com/pls/otn/f?p=4700:1:3713905407451993:::::

И что же в apex-е виртуального ?
"Oracle Application Express installs as a part of the seed database installation with Oracle Database 11g"


ну там регистрируешся и тебе дается простанство на 25 мегов. можно создать свою схему, БД и таблицы и работать с ними. Чисто для отладки запросов и т.п.
13 авг 11, 12:20    [11113957]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
автор
mplicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query


Какая колонка в T2 имеет тип varbinary? Номер_товара? А нафига вы ее такой сделали?
13 авг 11, 12:20    [11113964]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
SamMan
автор
mplicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query


Какая колонка в T2 имеет тип varbinary? Номер_товара? А нафига вы ее такой сделали?


точно... не тот тип из списка в попыхах выбрала :)
13 авг 11, 20:02    [11114831]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap
Разбирайтесь с Игрушкой-Танком!


анализиваровать полученное поле НомерНазвание на предмет: если оно пусто брать ПРАВОЕ слово из Тип_товара если то состоит из более одного слова?
14 авг 11, 21:56    [11117121]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap, одна надежда на вас у меня. Извиняюсь за наглость. Но у меня не получается ваш запрос адаптировать

у меня таблица-источник Table1 НЕ связана с Table2 (в которой нужно изменить данные) через напрямую через поле ID, а связь идет через таблицу Table_Main

структура Table_Main - промежуточная таблица
автор
ID ID_Table2 ID_Table3 ID_Table4
1 1 Null Null
2 2 Null Null
3 3 Null Null


ID_Table3 ID_Table4 это связи с другими таблицами. Они мне не нужны пока

структура Table1 - Источник
автор
ID Наименование
1 Авто № 608
2 Лодка 125 "Надувная"
3 Лодка № 192 Железная


структура Table2 - Назначение
автор
ID_Table2 Тип_товара Номер_товара Название_товара
1
2
3


т.е. мой укороченный запрос выглядит так:
update Table2 
set 
Table2.Тип_товара=Table1.Обрезка ТИПА из Наименование, 
Table2.Номер_товара=Table1.Обрезка НОМЕРА из Наименование,
Table2.Название_товара=Table1.Обрезка Названия из Наименование
from Table1, Table_main 
LEFT OUTER JOIN Table2 on Table_main.ID_Table2=Table2.ID_Table2
Where Table1.ID=Table_main.ID

iap, я уже 3-ий день никак ваш запрос не могу соединить с моим включением в запрос промежуточной таблицы, через которую связаны Таблица-источник и Таблица-назначение.

Помогите пожалуйста. Очень важный для меня запрос. Совсем отупела после универа. Запуталась в связях и алиасах. По всякому составляла множества но никак не выходит
16 авг 11, 11:49    [11125168]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Table1 и Table_main соединяете не через запятую, что есть банальный кросс-джоин, а через INNER JOIN:

from Table1 INNER JOIN Table_main ON...

А уж эту объединенную таблицу - с Table2, например по LEFT OUTER JOIN. Вы, кстати, понимаете зачем они объединяются именно LEFT и именно OUTER?

Ольга Семенова
Совсем отупела после универа


Для поднятия "остроты" - найти и читать о связи "многие-ко-многим". Это во-1х, отрезвляет , а во-2х будет очень даже в тему в данном случае.
16 авг 11, 13:15    [11125985]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
даже запрос на выборку ругается

Select 
Тип_товара =LTRIM(U.Тип_товара), 
Номер_товара=LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%',U.НомерНазвание),0)-1),U.НомерНазвание)), 
Название_товара=LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE U.НомерНазвание)),0)-1),'')))
FROM Table_main, 
 (
 SELECT
  ID,
  ISNULL(LEFT(Наименование, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1),Наименование)[Тип_товара],
  ISNULL(STUFF(Наименование,1, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1,''),'')[НомерНазвание]
 FROM
 (
  SELECT
   ID,
   REPLACE(REPLACE(Наименование,'№',''),'"','')[Наименование]
  FROM Table1
 ) T
) U
LEFT OUTER JOIN Table2 
on Table_main.ID_Table2=Table2.ID_Table2
Where U.ID=Table_main.ID

автор
Сообщение 4104, уровень 16, состояние 1, строка 2
The multi-part identifier "Table_main.ID_Table2" could not be bound.
Сообщение 207, уровень 16, состояние 1, строка 21
Invalid column name 'ID_Table2'.
16 авг 11, 14:52    [11126710]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова,

криво JOINы пишете.
Вам же уже про запятую сказали.
В результате Вашего упрямства в LEFT JOINе таблица Table_main не определена.
Замените запятую на "JOIN", а в качестве ON используйте то, что написано в WHERE
16 авг 11, 15:29    [11127104]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap
Ольга Семенова,

криво JOINы пишете.
Вам же уже про запятую сказали.
В результате Вашего упрямства в LEFT JOINе таблица Table_main не определена.
Замените запятую на "JOIN", а в качестве ON используйте то, что написано в WHERE


что за ЗАПЯТАЯ?
16 авг 11, 16:22    [11127679]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова
что за ЗАПЯТАЯ?

Такая точечка с хвостиком
16 авг 11, 16:23    [11127689]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова
iap
Ольга Семенова,

криво JOINы пишете.
Вам же уже про запятую сказали.
В результате Вашего упрямства в LEFT JOINе таблица Table_main не определена.
Замените запятую на "JOIN", а в качестве ON используйте то, что написано в WHERE


что за ЗАПЯТАЯ?
Я один её вижу, да?
16 авг 11, 16:26    [11127715]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
вот выборка вида
Select 
ID,
LTRIM(U.Тип) [тип], 
LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%',U.НомерНазвание),0)-1),U.НомерНазвание)) [номер], 
LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE(U.НомерНазвание)),0)-1),''))) [имя]
FROM 
 (
 SELECT
  ID,
  ISNULL(LEFT(наименование, NULLIF(PATINDEX('%[0-9]%',ROTM),0)-1),наименование)[тип],
  ISNULL(STUFF(наименование,1, NULLIF(PATINDEX('%[0-9]%',наименование),0)-1,''),'')[НомерНазвание]
 FROM
 (
  SELECT
   ID,
   REPLACE(REPLACE(наименование,'№',''),'"','')[наименование]
  FROM Table1
 ) T
) U

выборка правильная показывается

Но стоит добавить связь

select 
M.ID,
M.тип,           
M.номер,           
M.имя            

from  Job, 
(Select 
SHIZ,
LTRIM(U.тип) [тип], 
LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%',U.НомерНазвание),0)-1),U.НомерНазвание)) [номер], 
LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE(U.НомерНазвание)),0)-1),''))) [имя]
FROM 
 (
 SELECT
  ID,
  ISNULL(LEFT(наименование, NULLIF(PATINDEX('%[0-9]%',наименование),0)-1),наименование)[тип],
  ISNULL(STUFF(ROTM,1, NULLIF(PATINDEX('%[0-9]%',ROTM),0)-1,''),'')[НомерНазвание]
 FROM
 (
  SELECT
   ID,
   REPLACE(REPLACE(наименование,'№',''),'"','')[наименование]
  FROM Table1
 ) T
) U
) M

[b]LEFT OUTER JOIN Table2 on Table_Main.ID_Table2=Table2.ID_Table2
Where M.ID=Table_main.ID [/b]

автор
-------------
Сообщение 4104, уровень 16, состояние 1, строка 1
The multi-part identifier "Table_main.ID_Table2" could not be bound.


то вываливается. Все виды связей перебрала. И внутренних и внешних
16 авг 11, 16:43    [11127832]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова
Но стоит добавить связь

И где в этом запросе указана таблица Table_main ?
16 авг 11, 16:46    [11127858]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова,

таблицы во FROMе могут перечисляться через запятую (ANSI SQL-89)
или с помощью различных JOINов (ANSI SQL-92).
Смешивать эти два синтаксиса крайне нежелательно.
А Вы смешали! Спрашивается, зачем?
16 авг 11, 16:51    [11127910]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
Glory
Ольга Семенова
Но стоит добавить связь

И где в этом запросе указана таблица Table_main ?


select
M.ID,
M.тип,
M.номер,
M.имя

from Table_Main,
(Select
SHIZ,
LTRIM(U.тип) [тип],
LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%',U.НомерНазвание),0)-1),U.НомерНазвание)) [номер],
LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE(U.НомерНазвание)),0)-1),''))) [имя]
FROM
(
SELECT
ID,
ISNULL(LEFT(наименование, NULLIF(PATINDEX('%[0-9]%',наименование),0)-1),наименование)[тип],
ISNULL(STUFF(ROTM,1, NULLIF(PATINDEX('%[0-9]%',ROTM),0)-1,''),'')[НомерНазвание]
FROM
(
SELECT
ID,
REPLACE(REPLACE(наименование,'№',''),'"','')[наименование]
FROM Table1
) T
) U
) M

LEFT OUTER JOIN Table2 on Table_Main.ID_Table2=Table2.ID_Table2
Where M.ID=Table_main.ID


тоже самое если я Table_Main добавила во ФРОМ
16 авг 11, 17:15    [11128108]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова,

не знаю, на каком ещё языке высказаться.
После from Table_Main у Вас что написано?!
16 авг 11, 17:17    [11128129]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap
Ольга Семенова,

таблицы во FROMе могут перечисляться через запятую (ANSI SQL-89)
или с помощью различных JOINов (ANSI SQL-92).
Смешивать эти два синтаксиса крайне нежелательно.
А Вы смешали! Спрашивается, зачем?


для этого - т.к. я не знаю как мне соединить воедино
11125168

третьи сутки пошли как я безуспешно пытаюсь адаптировать ваш запрос. Все куски запроса уже попереставляла.
16 авг 11, 17:19    [11128142]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
iap
Ольга Семенова,

не знаю, на каком ещё языке высказаться.
После from Table_Main у Вас что написано?!


формализованное и разделенное по множество (тип, навание и номер) получаемое с помошью куска

(
 SELECT
  ID,
  ISNULL(LEFT(Наименование, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1),Наименование)[Тип_товара],
  ISNULL(STUFF(Наименование,1, NULLIF(PATINDEX('%[0-9]%',Наименование),0)-1,''),'')[НомерНазвание]
 FROM
 (
  SELECT
   ID,
   REPLACE(REPLACE(Наименование,'№',''),'"','')[Наименование]
  FROM Table1
 ) T
) U
16 авг 11, 17:22    [11128168]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ольга Семенова
третьи сутки пошли как я безуспешно пытаюсь адаптировать

Лучше бы вы три дня потратили на изучение синтаксиса

select
M.ID,
M.тип,
M.номер,
M.имя
from Table_Main
INNER JOIN
        (Select SHIZ, LTRIM(U.тип) [тип], LTRIM(ISNULL(LEFT(U.НомерНазвание, NULLIF(PATINDEX('%[^0-9]%', U.НомерНазвание), 0)-1),U.НомерНазвание)) [номер], 
                  LTRIM(REVERSE(ISNULL(LEFT(REVERSE(U.НомерНазвание), NULLIF(PATINDEX('%[0-9]%', REVERSE(U.НомерНазвание)),0)-1),''))) [имя]
         FROM
                (SELECT ID, ISNULL(LEFT(наименование, NULLIF(PATINDEX('%[0-9]%',наименование),0)-1),наименование)[тип],
                            ISNULL(STUFF(ROTM,1, NULLIF(PATINDEX('%[0-9]%',ROTM),0)-1,''),'')[НомерНазвание]
                 FROM
                       (SELECT ID, REPLACE(REPLACE(наименование,'№',''),'"','')[наименование]
                        FROM Table1
                       ) T
                 ) U
         ) M ON M.ID=Table_main.ID 
LEFT OUTER JOIN Table2 on Table_Main.ID_Table2=Table2.ID_Table2
16 авг 11, 17:23    [11128180]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Ольга Семенова
iap
Ольга Семенова,

таблицы во FROMе могут перечисляться через запятую (ANSI SQL-89)
или с помощью различных JOINов (ANSI SQL-92).
Смешивать эти два синтаксиса крайне нежелательно.
А Вы смешали! Спрашивается, зачем?


для этого - т.к. я не знаю как мне соединить воедино
11125168

третьи сутки пошли как я безуспешно пытаюсь адаптировать ваш запрос. Все куски запроса уже попереставляла.
Я ж Вам словами всё рассказал: 11127104
Осталось только выполнить!
Ну как же так?!
16 авг 11, 17:24    [11128194]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение значения поля (строковое) на составляющие  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 740
Glory, сработал ваш вариант... Выборка та что нужно . СПАСИБО. Буду переделывать под апдейт. Как мозг отсынет.
16 авг 11, 17:47    [11128440]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить