كيفية اكتشاف سلسلة من البيانات من XML في XQuery
-
05-09-2019 - |
سؤال
لدي عمود XML غير مصقول في قاعدة بيانات SQL Server التي تحمل قيم مثل
1
<root><a>123</a></root>
<root>23d</root>
23
كنت أحاول مع الاستعلام التالي
declare @x xml
set @x='1'
select @x.exist('xs:int(.)')
ولكن هنا المشكلة موجودة ستعود وظيفة 1 حتى لو @x='<root><a>12</a></root>'
أود إخراج "0" في مثل هذه الحالات.
هل هناك طريقة للخروج؟
المحلول
يتم إرجاع الأسلوب .EXIST () 1 إذا كان Exquery Expression يقيم إلى قائمة العقدة غير الفارغة، وإلا فإنه يعود 0. سيعود 1 كل مرة في المثال.
إذا فهمت لك بشكل صحيح، فأنت تريد العودة 1 عندما تكون القيمة مجرد عدد صحيح، و 0 عندما يكون XML؟
في هذه الحالة تحتاج إلى القيام بما يلي:
declare @x xml
set @x='<root><a>12</a></root>'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))
هذا يجب أن يعود 0
declare @x xml
set @x='12'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))
هذا يجب أن يعود 1
نصائح أخرى
ماذا عن اختبار النوع المدمج في Xquery؟
. instance of xs:integer
سيمنحك BOOLEAN TRUE إذا كان عنصر السياق عددا صحيحا، خطأ خلاف ذلك.
لا تنتمي إلى StackOverflow