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

Откуда: Moscow city
Сообщений: 616
имею на руках XML файл
<?xml version="1.0" encoding="utf-8"?>

<documents>
       <document>
               <code>281474979006074</code>
               <date>2007-12-07 13:51:02</date>
               <docnum>0000000000008731</docnum>
               <creatorcode>39</creatorcode>
               <Outletcode>17</Outletcode>
               <deleted>False</deleted>
               <comment/>
               <body>
                       <item>
                               <SKUcode>1650</SKUcode>
                               <unitcode>1</unitcode>
                               <quantity>1,0000</quantity>
                               <price>10,0000</price>
                       </item>
               </body>
       </document>
</documents>

необходимо раскидать его на две таблицы, но вопрос не в том, а ест ли способы или методология понимать FALSE и преобразовать в тип bit т.е. 1 или 0
как лучше сделать? case ??
declare @pLogic varchar(10)
set @pLogic = 'true'

select
case when @pLogic = 'True'  then 1
     when @pLogic = 'False' then 0
     else null
end as 'ValueLogic'

или может есть какие-то другие методы?

в диктанте три-четыре варнинга, но в общем компилируется
7 сен 09, 13:55    [7626510]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
SHKoder
какие-то другие методы?
select cast('true' as bit) as tr, cast('false' as bit) as fl

tr    fl
----- -----
1     0

(1 row(s) affected)
7 сен 09, 13:57    [7626527]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Попробовал насчет регистра:
declare @x xml
set @x = '<?xml version="1.0" encoding="utf-8"?>
<documents>
       <document>
               <docnum>0000000000008731</docnum>
               <deleted>False</deleted>
       </document>
       <document>
               <docnum>FFFFFFFFFFFFFFFF</docnum>
               <deleted>True</deleted>
       </document>
</documents>'

select doc.value('(./docnum/text())[1]', 'char(16)') as docnum
      ,doc.value('(./deleted/text())[1]', 'bit') as deleted
  from @x.nodes('/documents/document') as t(doc)

docnum           deleted
---------------- -------
0000000000008731 0
FFFFFFFFFFFFFFFF 1

(2 row(s) affected)
7 сен 09, 14:07    [7626594]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
Паганель
Попробовал насчет регистра:
select doc.value('(./docnum/text())[1]', 'char(16)') as docnum
      ,doc.value('(./deleted/text())[1]', 'bit') as deleted
  from @x.nodes('/documents/document') as t(doc)


блин, а как быть с
<quantity>1,0000</quantity>
<price>10,0000</price>
??
в задании пишут Double хотя я понимаю что это флоат
но с преобразованием проблемка
7 сен 09, 15:25    [7627259]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> блин, а как быть с
>
> <quantity>1,0000</quantity>
> <price>10,0000</price>
>
> ??
> в задании пишут Double хотя я понимаю что это флоат
> но с преобразованием проблемка

получить в varchar, заменить запятую на точку replace-ом, ну и
потом уже cast к нужному типу.

Posted via ActualForum NNTP Server 1.4

7 сен 09, 15:30    [7627312]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Glory
Member

Откуда:
Сообщений: 104760
SHKoder


блин, а как быть с
<quantity>1,0000</quantity>
<price>10,0000</price>
??
в задании пишут Double хотя я понимаю что это флоат
но с преобразованием проблемка

В TSQL это и не Double и не float
Потому что в TSQL десятичным разделителем является точка
7 сен 09, 15:31    [7627318]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
SHKoder
в задании пишут Double хотя я понимаю что это флоат
но с преобразованием проблемка
В задании неправда
До тех пор пока там в качестве разделителя не точка а запятая, можно считать это varchar-ом
declare @x xml
set @x = '<?xml version="1.0" encoding="utf-8"?>
<documents>
       <document>
               <code>281474979006074</code>
               <date>2007-12-07 13:51:02</date>
               <docnum>0000000000008731</docnum>
               <creatorcode>39</creatorcode>
               <Outletcode>17</Outletcode>
               <deleted>False</deleted>
               <comment/>
               <body>
                       <item>
                               <SKUcode>1650</SKUcode>
                               <unitcode>1</unitcode>
                               <quantity>1,0000</quantity>
                               <price>10,0000</price>
                       </item>
               </body>
       </document>
</documents>'

select doc.value('(./body/item/quantity/text())[1]', 'varchar(16)') as quantity
      ,doc.value('(./body/item/price/text())[1]', 'varchar(16)') as price
  from @x.nodes('/documents/document') as t(doc)

quantity         price
---------------- ----------------
1,0000           10,0000

(1 row(s) affected)
7 сен 09, 15:33    [7627343]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
так а мне в таблицу потом засунуть эти значения с полями типа float
и нужно сохранить точность значений эти же 4ре знака после зпт
в диктанте три-четыре варнинга, но в общем компилируется
7 сен 09, 15:35    [7627372]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Glory
Member

Откуда:
Сообщений: 104760
SHKoder
так а мне в таблицу потом засунуть эти значения с полями типа float
и нужно сохранить точность значений эти же 4ре знака после зпт

Ну так все равно придется использовать правильный десятичный разделитель
7 сен 09, 15:37    [7627387]     Ответить | Цитировать Сообщить модератору
 Re: парс в XML (true, false)  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Спросите об этом тех, кто Вам такой XML присылает
7 сен 09, 15:37    [7627390]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить