Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कैसे जांचें कि एक स्ट्रिंग एक अद्वितीय पहचानकर्ता है या नहीं?

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 + '}%' 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या Microsoft SQL सर्वर पर SQL क्वेरी के लिए टाइमआउट सेट करना संभव है?

  2. SQL सर्वर समांतर डेटावेयरहाउसिंग टीडीएस त्रुटि के लिए कर्सर समर्थन के लिए एक वर्कअराउंड एक कार्यान्वित सुविधा नहीं है

  3. SQL सर्वर में प्राथमिक कुंजी के साथ सभी तालिकाओं को वापस करने के 7 तरीके

  4. पंक्ति मानों को CSV में मर्ज करें (SQL सर्वर के लिए उर्फ ​​GROUP_CONCAT)

  5. SQL सर्वर चलाने वाले दो डॉकटर कंटेनरों के बीच एक लिंक्ड सर्वर बनाएँ (T-SQL उदाहरण)