转载---SQL Server XML基础学习之5--XQuery(query)
生活随笔
收集整理的這篇文章主要介紹了
转载---SQL Server XML基础学习之5--XQuery(query)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本章寫一些SQL Server XML的一些XQuery基礎語法,主要講的query查詢語法
T-SQL 支持用于查詢 XML 數據類型的 XQuery 語言的子集。 XQuery 基于現有的 XPath 查詢語言,并支持更好的迭代、更好的排序結果以及構造必需的 XML 的功能。 在前面我們已經學習了 XPath 的基本語法,本章將學習T-SQL 的 XQuery 語法 ------------------------------------------------------------------------------------------------------------------ T-SQL XQuery包含如下函數 query(XPath條件): 結果為 xml 類型; 返回由符合條件的節點組成的非類型化的 XML 實例 value(XPath條件,數據類型):結果為指定的標量值類型; xpath條件結果必須唯一 exist(XPath條件):結果為布爾值; 表示節點是否存在,如果執行查詢的 XML 數據類型實例包含NULL則返回NULL nodes(XPath條件): 返回由符合條件的節點組成的一行一列的結果表 */DECLARE @x XML SET @x=' <root><rogue id="001"><hobo id="1"><name>彪</name><name>阿彪</name><type>流氓</type></hobo></rogue><rogue id="002"><hobo id="2"><name>光輝</name><name>二輝</name><type>流氓</type></hobo></rogue><rogue id="001"><hobo id="3"><name>小德</name><name>小D</name><type>臭流氓</type></hobo></rogue> </root>' --取root的所有子節點 --SELECT @x.query('root'),@x.query('/root'),@x.query('.') --/*注釋: -- 這里實際上是取所有節點,root 必須是最高級節點名稱,當換成任意子節點都是取不到值的 --*/ --取 hobo 的所有子節點,不管 hobo 在文檔中的位置。 SELECT @x.query('//hobo') ----擴展:取rogue下 所有 name SELECT @x.query('//rogue//name') --取屬性為id 的所有節點 SELECT @x.query('//hobo[@id]') /*注釋:XQuery不支持直接頂級 attribute 節點,必須附帶上對節點的查找屬性必須要加[] */ --選取屬于 root 子元素的第一個 rogue 元素。 SELECT @x.query('/root/rogue[1]') --選取屬于 root 子元素的最后一個 rogue 元素。 SELECT @x.query('/root/rogue[last()]') --選取屬于 root 子元素的倒數第二個 rogue 元素。 SELECT @x.query('/root/rogue[last()-1]') --選取最前面的兩個屬于 root 元素的子元素的 rogue 元素。 SELECT @x.query('/root/rogue[position()<3]') --選取 root 元素的所有 hobo 元素,且其中的屬性 id 的值須大于 1。 SELECT @x.query('/root//hobo[@id>1]') ----擴展: root 元素的所有 hobo 元素,且其中的屬性 id 的值須大于 1 并且子節點 name 的值為 光輝 的。 SELECT @x.query('/root/rogue[./hobo[@id>1 and name="光輝"]]') --選取 root 子元素的所有 rogue 元素,且 屬性id 的值須大于 為001 子元素hobo 屬性 id 的值為 1的 SELECT @x.query('/root/rogue[@id="001" and ./hobo[@id=1]]') --if then else 表達式 SELECT @x.query(' if ( 1=2 ) then/root/rogue[@id="001"] else/root/rogue[@id="002"] ')--路徑表達式步驟中的謂詞 SELECT @x.query('/root/rogue[1]/hobo/name')--選擇第一個 /root/rogue 節點下的所有 <Name> 元素。 SELECT @x.query('/root/rogue/hobo[1]/name')--選擇 /root/rogue/hobo 節點下的所有 <Name> 元素。 SELECT @x.query('/root/rogue/hobo/name[1]')--選擇 /root/rogue/hobo 節點下的所有第一個 <Name> 元素。 SELECT @x.query('(/root/rogue/hobo/name)[1]')--選擇 /root/rogue/hobo 節點下的第一個 <Name> 元素。 --使用聚合函數 SELECT @x.query('count(/root/rogue/hobo/name)'),@x.query('count(/root/rogue/hobo/name[1])')--FLWOR 迭代語法。FLWOR 是 for、let、where、order by 和 return 的縮寫詞。 --1 SELECT @x.query(' <result>{ for $i in /root/rogue/hobo/name[1]return string($i)} </result>') --2 SELECT @x.query('for $Loc in /root/rogue/hobo,$FirstStep in $Loc/name[1]return string($FirstStep) ') --3 SELECT @x.query('for $i in /root/rogue/hoboorder by $i/@id descendingreturn string($i/name[1]) ') --4 SELECT @x.query('for $i in /root/rogue/hoboorder by local-name($i) return string($i/name[1]) ')?
轉載于:https://www.cnblogs.com/Frank99/p/5974448.html
總結
以上是生活随笔為你收集整理的转载---SQL Server XML基础学习之5--XQuery(query)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 用MediaRecord
- 下一篇: 清除number输入框的上下箭头