如果我在下面运行SQL查询;我收到以下错误:
将数据类型nvarchar转换为数字时出错。
COLUMNA
仅包含数字(负数和正数),包括小数点后最多两位数的字段,并存储为点小数。
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;
我也尝试了以下方法,但仍然存在同样的问题:
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 :(得分:20)
您可能需要修改列中的数据,但无论如何您可以执行以下操作之一: -
1-检查它是否为数字然后将其转换为其他值,如0
Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1
THEN CONVERT(DECIMAL(18,2),COLUMNA)
ELSE 0 END AS COLUMNA
2-仅选择列中的数值
SELECT COLUMNA AS COLUMNA_s ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
where Isnumeric(COLUMNA) = 1
答案 1 :(得分:3)
对于带有字符“ e”“ +”的浮点值,如果我们尝试将其转换为十进制,则会出错。 ('2.81104e + 006')。它仍然通过了ISNUMERIC测试。
SELECT ISNUMERIC('2.81104e+006')
返回1
。
SELECT convert(decimal(15,2), '2.81104e+006')
返回
错误:将数据类型varchar转换为数字时出错。
和
SELECT try_convert(decimal(15,2), '2.81104e+006')
返回NULL
。
SELECT convert(float, '2.81104e+006')
返回正确的值2811040
。
答案 2 :(得分:1)
从nvarchar转换为float时遇到了此错误。
我要做的是在nvarchar字段上使用LEFT
函数。
示例:Left(Field,4)
基本上,查询将如下所示:
Select convert(float,left(Field,4)) from TABLE
可笑的是,SQL会将它复杂化到这种程度,而使用C#却很容易!
希望它可以帮助某个人。