none
XQuery RRS feed

  • Вопрос

  • Добрый день. Помогите с запросом. У меня в поле XML есть тег с датой. Как поставить условие WHERE в запросе что бы можно было сравнивать даты?

    Например делаю так

    Select xCol.query(/object)

    From Elements

    Where (?????) < (дата представленная Double )

    Заранее спасибо!

    • Перемещено SachinW 2 октября 2010 г. 0:17 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    4 августа 2010 г. 5:27

Ответы

  • Вытягиваете дату из XML при помощи value, примерно так:

    xCol.value('(/object/date)[1]', 'nvarchar(30)')

    потом это выражение можете использовать вместо (?????). Потом преобразование типов или получение данных сразу в нужном вам типе для сравнения. Принцип я думаю понятен.

    • Помечено в качестве ответа zolton 4 августа 2010 г. 11:03
    4 августа 2010 г. 9:42

Все ответы

  • Вытягиваете дату из XML при помощи value, примерно так:

    xCol.value('(/object/date)[1]', 'nvarchar(30)')

    потом это выражение можете использовать вместо (?????). Потом преобразование типов или получение данных сразу в нужном вам типе для сравнения. Принцип я думаю понятен.

    • Помечено в качестве ответа zolton 4 августа 2010 г. 11:03
    4 августа 2010 г. 9:42
  • declare @t table (id int, val xml)
    insert into @t
    select 1, '<val1 dt="2002-01-01Z"/>'
    union all
    select 2, '<val1 dt="2002-01-02Z"/>'
    
    SELECT
    *
    FROM @t t
    WHERE
    t.val.exist('/val1[(@dt cast as xs:date?) eq xs:date("2002-01-01Z")]')=1
    
    Либо так
    http://www.t-sql.ru
    4 августа 2010 г. 9:59
    Модератор
  • Спасибо! Разобрался.
    4 августа 2010 г. 11:03
  • а скажите можно ли на время коннекта к серверу или перед выполнением запроса указать ему свой разделитель дробной части? Т.е если на машине где стоит сервер стоит точка, а у меня в Xml запятая.
    4 августа 2010 г. 11:55
  • а скажите можно ли на время коннекта к серверу или перед выполнением запроса указать ему свой разделитель дробной части? Т.е если на машине где стоит сервер стоит точка, а у меня в Xml запятая.

    у сиквела свой разделитель...точка
    http://www.t-sql.ru
    4 августа 2010 г. 12:02
    Модератор
  • т.е если я правильно понимаю,  то я не могу написать в запросе ...Where data < 17,05 ?
    нужно писпать Where data < 17.05
    4 августа 2010 г. 12:07
  • т.е если я правильно понимаю,  то я не могу написать в запросе ...Where data < 17,05 ?
    нужно писпать Where data < 17.05


    либо явно точку либо только через преобразование, например:

    Where data < cast( replace('17,05', ',', '.') as decimal(10,2) ) 
    

    http://www.t-sql.ru
    4 августа 2010 г. 13:17
    Модератор