( SQL Server 2012 veya daha yenisini kullanıyorsanız, lütfen daha temiz bir yaklaşım için @ wBob'un cevabına bakın. Aşağıdaki cevabımda özetlenen yaklaşım yalnızca SQL Server 2008 R2 veya daha yenisini kullanıyorsanız gereklidir. )
NUMERIC
Virgül, nokta veya boşluk olsun, dönüştürürken binlerce ayırıcıya ihtiyacınız yoktur (veya istemezsiniz) , bu yüzden önce onlardan kurtulun. Sonra virgül bir noktaya / ondalık sayıya dönüştürülür ve işlem tamamlanır:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
İadeler:
7000.45
Tamlık uğruna şunu da denemeliyim:
SET LANGUAGE Greek;
CONVERT için çeşitli format stillerine bakmakla birlikte , burada hiçbir şey geçerli değildir.
FORMAT fonksiyonu, ancak giriş türü (SQL Server 2008 R2 için geçerli veya daha büyük değil ve SQL Server 2012'de tanıtıldı olduğunu,) sayısal veya tarih / saat / tarih saat değeri olmalıdır.
Ve hiçbir şey işe yaramadı. İki REPLACE
çağrıdan daha zarif bir şey bulmayı umuyordum , ama şimdiye kadar böyle bir şans yok.
Ayrıca, sadece bahsetmek gerekirse, saf bir T-SQL çözümü olmasa da, bu SQLCLR ile de gerçekleştirilebilir. Ve bunu String_TryParseToDecimal adlı SQL # kitaplığında (yazdığım) yapan önceden yapılmış bir işlev var . Bu işlev Ücretsiz sürümde kullanılabilir ve SQL Server 2005'ten başlayarak SQL Server'ın her sürümünde çalışır:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
İadeler:
7000.45000000000000000000