2012-06-18 34 views
1

我對SQL Server有一個相當愚蠢的問題。我試圖在SQL Server中存儲一個BigInt,並且在將它插入Nvarchar(Max)風格字段之前,我可以將它轉換爲字符串。SQL Server中的數字字符串比較

但是,我需要對該列運行一個SELECT語句,並且由於它是一個字符串,我不確定如何評估它。我知道某些語言中的字符串的確用數字來評估,因此'234234'被認爲小於'2342545345344'。在這裏可以做類似的事情嗎?

編輯: 爆炸,我是一個白癡。我的意思是說C#的BigInteger,它可以保存比SQL的BigInt大得多的值。

+3

爲什麼?只需將其存儲爲'bigint'。或者如果你需要的範圍大於-2^63(-9,223,372,036,854,775,808)至2^63-1(9,223,372,036,854,775,807)' –

+0

這個EAV系統,它可以包含所有類型的東西到一個'nvarchar(max)'列?如果是這樣,你可以考慮不這樣做,或者使用'sql_variant'(將根據數據類型規則進行排序)以及轉換。 –

回答

2
order by cast(varchar_column as bigint) 
1

什麼類型的SELECT你會表演?作爲快速的第一步(假設所有的值都是正數,並且存儲爲一系列數字(沒有科學記數法或符號符號)),您可以比較兩個字符串的長度。

較短的字符串是兩者中較小的一個。如果兩個字符串的長度相同,則較小的字符串(按字母順序)在數字上較小。

因此,輸出0a小於b1平等,2ab更大:

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