كيفية اكتشاف سلسلة من البيانات من XML في XQuery

StackOverflow https://stackoverflow.com/questions/568990

  •  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 إذا كان عنصر السياق عددا صحيحا، خطأ خلاف ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top