SQL Server 2012 TRY_CONVERT(UNIQUEIDENTIFIER, expression)
के साथ यह सब बहुत आसान बना देता है
SELECT something
FROM your_table
WHERE TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;
SQL सर्वर के पूर्व संस्करणों के लिए, मौजूदा उत्तरों में कुछ बिंदु छूट जाते हैं, जिसका अर्थ है कि वे या तो उन स्ट्रिंग्स से मेल नहीं खा सकते हैं जो SQL सर्वर वास्तव में UNIQUEIDENTIFIER
पर डाली जाएगी। शिकायत के बिना या फिर भी अमान्य कास्ट त्रुटियों का कारण बन सकता है।
SQL सर्वर या तो {}
में लिपटे GUID को स्वीकार करता है या इसके बिना।
इसके अतिरिक्त यह स्ट्रिंग के अंत में बाहरी वर्णों को अनदेखा करता है। दोनों SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier)
और SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier)
उदाहरण के लिए सफल।
अधिकांश डिफ़ॉल्ट संयोजनों के अंतर्गत LIKE '[a-zA-Z0-9]'
À
. जैसे मेल खाने वाले वर्णों को समाप्त कर देगा या Ë
अंत में यदि अद्वितीय पहचानकर्ता के परिणामस्वरूप पंक्तियों को कास्ट करना महत्वपूर्ण है तो कास्ट प्रयास को केस एक्सप्रेशन में रखना महत्वपूर्ण है क्योंकि पंक्तियों को WHERE
द्वारा फ़िल्टर किए जाने से पहले कास्ट हो सकता है। .
तो (उधार @ r0d30b0y का विचार) थोड़ा अधिक मजबूत संस्करण हो सकता है
;WITH T(C)
AS (SELECT '5D944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}'
UNION ALL
SELECT '5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss'
UNION ALL
SELECT 'ÀD944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT 'fish')
SELECT CASE
WHEN C LIKE expression + '%'
OR C LIKE '{' + expression + '}%' THEN CAST(C AS UNIQUEIDENTIFIER)
END
FROM T
CROSS APPLY (SELECT REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]') COLLATE Latin1_General_BIN) C2(expression)
WHERE C LIKE expression + '%'
OR C LIKE '{' + expression + '}%'