Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara memeriksa apakah string adalah pengidentifikasi unik?

SQL Server 2012 membuat semua ini lebih mudah dengan TRY_CONVERT(UNIQUEIDENTIFIER, expression)

SELECT something
FROM   your_table
WHERE  TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;

Untuk versi SQL Server sebelumnya, jawaban yang ada kehilangan beberapa poin yang berarti mereka mungkin tidak cocok dengan string yang sebenarnya akan dilemparkan oleh SQL Server ke UNIQUEIDENTIFIER tanpa keluhan atau mungkin masih menyebabkan kesalahan pemeran yang tidak valid.

SQL Server menerima GUID baik yang dibungkus dengan {} atau tanpa ini.

Selain itu mengabaikan karakter asing di akhir string. Keduanya SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier) dan SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier) berhasil misalnya.

Di sebagian besar susunan default, LIKE '[a-zA-Z0-9]' akan berakhir dengan karakter yang cocok seperti À atau Ë

Terakhir, jika casting baris dalam hasil ke uniqueidentifier, penting untuk menempatkan upaya cast dalam ekspresi kasus karena pemeran mungkin terjadi sebelum baris difilter oleh WHERE .

Jadi (meminjam ide @ r0d30b0y) versi yang sedikit lebih kuat mungkin

;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. Bagian waktu dari Bidang DateTime di SQL

  2. T-SQL:Bulatkan ke interval 15 menit terdekat

  3. Apa yang terjadi pada transaksi yang tidak terikat ketika koneksi ditutup?

  4. Bagaimana cara melakukan IF...THEN dalam SQL SELECT?

  5. Perbandingan Tipe Data Tanggal &Waktu di SQL Server