[SQL] 문자열이 고유 식별자 인 경우 확인하는 방법?
SQL문자열이 고유 식별자 인 경우 확인하는 방법?
고유 식별자 (SQL 서버)에 대한 ISDATE 또는 ISNUMERIC에 해당하는이 있습니까? 또는 (C #을) TryParse에이 아무것도 상응하는 무엇입니까?
그렇지 않으면 나는 내 자신의 함수를 작성해야하지만, 나는 확실히 나는 바퀴를 개혁하고 있지 않다 만들고 싶어.
내가 커버에 노력하고있어 시나리오는 다음과 같다 :
SELECT something FROM table WHERE IsUniqueidentifier(column) = 1
해결법
-
==============================
1.SQL 서버 2012의 모든 훨씬 쉽게 TRY_CONVERT (고유 식별자, 표현)이한다
SQL 서버 2012의 모든 훨씬 쉽게 TRY_CONVERT (고유 식별자, 표현)이한다
SELECT something FROM your_table WHERE TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;
SQL 서버의 이전 버전의 경우, 기존의 답변은 두 SQL 서버 또는 불만없이 고유 식별자에 대한 사실 캐스트 여전히 유효 캐스트 오류가 발생 끝낼 수 있습니다 것입니다 문자열과 일치하지 않을 수 있습니다 의미 몇 점을 놓친다.
SQL Server는 {에서} 또는이없이 포장 GUID를 받아들입니다.
또한 그것은 문자열의 마지막에없는 문자를 무시합니다. 두 SELECT CAST (고유 식별자로 '{5D944516-98E6-44C5-849F-9C277833C01B} ssssssssss')와 SELECT CAST (고유 식별자로 '5D944516-98E6-44C5-849F - 9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')는 예를 들어 성공.
대부분의 기본 데이터 정렬 아래에서 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 + '}%'
-
==============================
2.하지 광산은 ... 온라인이 발견 내가 공유하고자합니다.
하지 광산은 ... 온라인이 발견 내가 공유하고자합니다.
SELECT 1 WHERE @StringToCompare LIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]');
-
==============================
3.
SELECT something FROM table1 WHERE column1 LIKE '[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]';
최신 정보:
...하지만 훨씬 @ r0d30b0y에 의해 대답의 접근 방식을 선호한다 :
SELECT something FROM table1 WHERE column1 LIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]');
-
==============================
4.난 당신이 "상자 밖으로"를 사용할 수 있다는 것을 인식하지 오전 - 당신이 당신 자신이 작성해야, 난 두려워.
난 당신이 "상자 밖으로"를 사용할 수 있다는 것을 인식하지 오전 - 당신이 당신 자신이 작성해야, 난 두려워.
당신이 할 수있는 경우 : - 확실히 훨씬 쉽게 T-SQL에서 무엇보다 사용하는 것입니다있는) 다음 Guid.TryParse (같은 것들을 사용할 수있는 C #을 라이브러리 내부에이를 작성하고 어셈블리 SQL-CLR로 SQL Server에 배포하려고합니다. ...
-
==============================
5.마찬가지로 것은 그것을 간단하게 유지합니다. GUID는 사 가지고 - 그 안에도 단지 문자열 인 경우
마찬가지로 것은 그것을 간단하게 유지합니다. GUID는 사 가지고 - 그 안에도 단지 문자열 인 경우
WHERE 열처럼 '% - % - % - % - %'
-
==============================
6.r0d30b0y 응답의 변형은 문자열 내에서 찾을 PATINDEX를 사용하는 것입니다 ...
r0d30b0y 응답의 변형은 문자열 내에서 찾을 PATINDEX를 사용하는 것입니다 ...
PATINDEX('%'+REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]')+'%',@StringToCompare) > 0
URL 문자열에서 GUID를 찾기 위해 사용했다 ..
HTH
데이브
-
==============================
7.이것은 일부 이전 의견의 개념을 기반으로하는 기능입니다. 이 기능은 매우 빠릅니다.
이것은 일부 이전 의견의 개념을 기반으로하는 기능입니다. 이 기능은 매우 빠릅니다.
CREATE FUNCTION [dbo].[IsGuid] (@input varchar(50)) RETURNS bit AS BEGIN RETURN case when @input like '[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]-[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]' then 1 else 0 end END GO /* Usage: select [dbo].[IsGuid]('123') -- Returns 0 select [dbo].[IsGuid]('ebd8aebd-7ea3-439d-a7bc-e009dee0eae0') -- Returns 1 select * from SomeTable where dbo.IsGuid(TableField) = 0 -- Returns table with all non convertable items! */
-
==============================
8.이전 포스트하지만, 단지 빠른 시험을 위해 생각 ...
이전 포스트하지만, 단지 빠른 시험을 위해 생각 ...
SELECT [A].[INPUT], CAST([A].[INPUT] AS [UNIQUEIDENTIFIER]) FROM ( SELECT '5D944516-98E6-44C5-849F-9C277833C01B' Collate Latin1_General_100_BIN AS [INPUT] 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' ) [A] WHERE PATINDEX('[^0-9A-F-{}]%', [A].[INPUT]) = 0
-
==============================
9.당신은 당신의 자신의 UDF를 작성할 수 있습니다. 이 어셈블리 SQL-CLR의 사용을 피하기 위해 간단한 근사하다.
당신은 당신의 자신의 UDF를 작성할 수 있습니다. 이 어셈블리 SQL-CLR의 사용을 피하기 위해 간단한 근사하다.
CREATE FUNCTION dbo.isuniqueidentifier (@ui varchar(50)) RETURNS bit AS BEGIN RETURN case when substring(@ui,9,1)='-' and substring(@ui,14,1)='-' and substring(@ui,19,1)='-' and substring(@ui,24,1)='-' and len(@ui) = 36 then 1 else 0 end END GO
그런 다음 키우면 경우 단지 HEX 값에 대한 확인을 향상시킬 수 있습니다.
-
==============================
10.나는 사용한다 :
나는 사용한다 :
ISNULL(convert(nvarchar(50), userID), 'NULL') = 'NULL'
-
==============================
11.내가 생성 된 필드에 대해 기본적으로 GUID를 사용 AutoFixture으로 생성 된 일부 테스트 사용자를했다. 내가 삭제해야하는 사용자를위한 내 FIRSTNAME 필드의 GUID 또는 uniqueidentifiers 있습니다. 그게 내가 여기 종료 방법입니다.
내가 생성 된 필드에 대해 기본적으로 GUID를 사용 AutoFixture으로 생성 된 일부 테스트 사용자를했다. 내가 삭제해야하는 사용자를위한 내 FIRSTNAME 필드의 GUID 또는 uniqueidentifiers 있습니다. 그게 내가 여기 종료 방법입니다.
나는이에 답의 일부를 함께 자갈 수 있었다.
[회원] FROM SELECT 사용자 아이디. [사용자 정보] 여기서 TRY_CONVERT (고유 식별자, 이름)이없는 널
-
==============================
12.MYSQL에 대한 사용 RLIKE
MYSQL에 대한 사용 RLIKE
SELECT 1 WHERE @StringToCompare RLIKE REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]');
from https://stackoverflow.com/questions/4649317/how-to-check-if-a-string-is-a-uniqueidentifier by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 는 SQL 쿼리 알려진 두 문자열 사이의 문자열을 선택합니다 (0) | 2020.05.01 |
---|---|
[SQL] 기준 개체로 그룹 최대 절전 모드 (0) | 2020.05.01 |
[SQL] SQL은 - 어떻게 최대 값을 가진 열을 갖는 행을 선택합니다 (0) | 2020.05.01 |
[SQL] SQL LIKE의 C # 버전 (0) | 2020.05.01 |
[SQL] 물음표는 SQL 쿼리에 무엇을 상징 하는가? [복제] (0) | 2020.05.01 |