2015-10-21 23 views
6

Aşağıdaki SQL sorgusunu çalıştırırsam; Aşağıdaki hatayı alıyorum:SQL Server: nvarchar veri türünü sayısal olarak dönüştürürken hata

Error converting data type nvarchar to numeric.

COLUMNA ondalık sonra iki basamağa kadar maksimal içeren alanlar dahil olmak üzere yalnızca sayılar (negatif ve pozitif) içerir ve nokta ondalık olarak depolanır.

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA] 
SELECT 
    COLUMNA AS COLUMNA_s 
    ,CASE WHEN [COLUMNA] = '' THEN 0 ELSE CONVERT(NUMERIC(18,2),REPLACE([COLUMNA],',','.')) END AS COLUMNA 
INTO st00_TABLEA 
FROM dbosu.TABLEA; 

şunlarla, ama yine aynı sorun çalıştı:

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA] 
SELECT 
    COLUMNA AS COLUMNA_s 
    ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA 
INTO st00_TABLEA 
FROM dbosu.TABLEA; 
+0

sütunundan gelen umeric değerler, COLUMNA –

+0

örneklerini ekleyebilir misiniz? Bir numuneyi nasıl/nerede yükleyebilirim? – bbilal

cevap

15

Sen sütundaki verileri revize etmek gerekebilir, ama yine de aşağıdakilerden birini yapabilirsiniz: -

Bu sayısal olup olmadığını

1- onay sonra başka 0

Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1 
THEN CONVERT(DECIMAL(18,2),COLUMNA) 
ELSE 0 END AS COLUMNA 

2- sadece n seçmek gibi bir değer koymak dönüştürmek

+0

Girişiniz için teşekkürler; Ancak bana şu anda başka bir hata veriyor: 'REGEXP' yakınında bir koşulun beklendiği bir bağlamda belirtilen boolean olmayan bir ifadenin ifadesi. – bbilal

+0

@bbilal lütfen şimdi kontrol edin, ben sorguları güncelledim –

+0

Teşekkürler! Şimdi çalışıyor. Sorunuzda, hücrelerin sayısal olup olmadığını kontrol edersiniz; Eğer evetse; sonra onları dönüştürün. Neyi anlamıyorum ki; COLUMNA aslında tabloda yalnızca sayısal değerlere sahiptir (hem negatif hem de pozitif sayıların yanı sıra sıfırlar). Isnumeric için kontrolün neden gerekli olduğunu biliyor musunuz? – bbilal

İlgili konular