我知道這看起來像重複,但我沒有看到我正在查找的答案。SQL Server從VARCHAR中提取INT
我有一個ID列,是VARCHAR(36)的ID令牌。在遺留系統中,這些令牌只有INT。現在他們都混在一起了,我需要能夠僅爲特定操作提取整數標記,並且必須將其轉換爲INT。
我想我可以做到這一點的是:
select top 100000 convert(int,CustomerToken) as CustomerToken
from Customer
WHERE (CustomerToken NOT LIKE '%[^-+ 0-9]%' AND CustomerToken < '214783647')
但也有我不希望一些數值。但有些數值會帶來問題。我得到錯誤varchar值'11122241333'溢出了一個int列。
這對我來說似乎很奇怪。這似乎更加古怪:
SELECT 1 WHERE '11122241333' < '2147483647'
1
????
有沒有人見過這個?任何人都知道我能做些什麼嗎?
轉換爲bigint或decimal。 –
將您的int更改爲很長時間以解決您的第一個問題。此外,請嘗試:SELECT 1 WHERE 11122241333 <2147483647.這就是SQL設計的工作方式,在字符串比較2> 1中,因此返回1. – RandomUs1r
答案在上面...對當前行爲的解釋...查看列表go 1,10,11,2,20,3,4,5,6等..?這是varchar數字排序的方式。 – Twelfth