2012-06-18 4 views
1

SQL Server에 대해 다소 바보 같은 질문이 있습니다. SQL Server에 BigInt를 저장하려고 시도하고 있는데, 문자열로 변환 한 다음 Nvarchar(Max) -style 필드에 삽입 할 수 있습니다.SQL Server의 숫자 문자열 비교

그러나 해당 열에 대해 SELECT 문을 실행해야하며 문자열이므로이를 평가하는 방법을 모르겠습니다. 일부 언어의 문자열은 수치로 평가되므로 '234234'는 '2342545345344'보다 작은 것으로 간주됩니다. 여기서 비슷한 것을 할 수 있을까요?

편집 : 폭발, 나는 바보입니다. C#의 BigInteger는 SQL의 BigInt보다 훨씬 큰 값을 저장할 수 있습니다.

+3

이유 :

그래서, 출력 a위한 0b보다 큰 a위한 2 동일 미만 b, 1인가? 'bigint'로 저장하십시오. '-2^63 (-9,223,372,036854775808)에서 2^63-1 (9,223,372,036854775807)까지의 범위가 필요하다면'numeric (38,0)'을 사용할 수 있습니다. –

+0

모든 종류의 것들이 채워진 EAV 시스템입니까? nvarchar (최대) 열에? 그렇다면 당신은 그렇게하지 않거나'sql_variant' (데이터 유형 규칙에 따라 정렬 할 것임)와 캐스팅을 고려할 수 있습니다. –

답변

2
order by cast(varchar_column as bigint) 
1

어떤 유형의 SELECT을 수행 하시겠습니까? 빠른 첫 번째 단계 (모든 값이 양수이고 숫자 시퀀스 (과학 표기법 또는 부호 기호 없음)로 저장 됨)로 가정하면 두 문자열의 길이를 비교할 수 있습니다.

짧은 문자열은 두 개의 문자열 중 작은 것입니다. 두 개의 문자열 이 동일한 길이 인 인 경우 더 작은 문자열 (알파벳순)은 숫자가 적습니다.

CASE 
    WHEN LEN(a) < LEN(b) THEN 0 
    WHEN LEN(a) > LEN(b) THEN 2 
    WHEN a < b THEN 0 
    WHEN a > b THEN 2 
    ELSE 1 
END