sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kontrollerer man, om en streng er en unik identifikator?

SQL Server 2012 gør det hele meget nemmere med TRY_CONVERT(UNIQUEIDENTIFIER, expression)

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

For tidligere versioner af SQL Server savner de eksisterende svar nogle få punkter, hvilket betyder, at de enten ikke matcher strenge, som SQL Server faktisk vil caste til UNIQUEIDENTIFIER uden klage eller kan stadig ende med at forårsage ugyldige cast-fejl.

SQL Server accepterer GUID'er enten pakket ind i {} eller uden dette.

Derudover ignorerer den uvedkommende tegn i slutningen af ​​strengen. Både SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier) og SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier) lykkes for eksempel.

Under de fleste standardsorteringer er LIKE '[a-zA-Z0-9]' vil ende med at matche tegn såsom À eller Ë

Til sidst, hvis der castes rækker i et resultat til entydig identifikator, er det vigtigt at placere cast-forsøget i et case-udtryk, da castet kan forekomme, før rækkerne filtreres af WHERE .

Så (låner @r0d30b0ys idé) kan en lidt mere robust version være

;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. Sådan formateres datoer i Oracle

  2. Find ud af, hvilken partition en given værdi ville være knyttet til i SQL Server (T-SQL)

  3. Opnå MySQL Failover &Failback på Google Cloud Platform (GCP)

  4. Hvordan databaser understøtter e-handelsvirksomheder