從資料型別varchar轉換為numeric時出錯 怎麼解決

2022-11-08 21:37:07 字數 3683 閱讀 9336

1樓:匿名使用者

首先這個問題涉及到ado程式設計。

既然你使用了tadoquery控制元件。說明你應該對這方面有一些瞭解了。

下面我會和你說下除錯的方法和問題出現的原因以及解決方案。

1.除錯

當你在adoquery1.execsql;這句設定斷點,即滑鼠停留在該行,按下f5。

右擊選擇選單debug-evaluate/modify彈出對話方塊,在expression輸入adoquery1.sql.text按下回車

result將顯示該資料的內容。你將得到一條完整的資料庫操作語句。

複製該sql語句,到查詢分析器或者pl/sql中執行。將得到錯誤原因。

2. 原因

由於你的插入語句使用的是含有引號的值,根據標準sql語法,理解為字元陣列。而你資料庫中的表欄位是數字型別的。由於資料型別不相符。資料庫報錯。錯誤原因即你題目中寫到的。

3.解決方案

將sql語句修改一下,或者修改資料庫中的表欄位結構。(一般情況表結構不會輕易變動,除非是設計時不合理)

4.優化

關於sql的優化方案有很多型別。例如你題目中的寫法,執行時準確性可以保證,但是效率可以提高。比如將sql的拼寫使用繫結變數方式。

如果批量使用該語句時,可以多條一起提交。優化的原理是利用資料庫自帶的快取,提高效率。

另外,表在設計時竟可能不要使用中文。控制元件名稱多使用一些有意義的變數名。比如insertquery,date,account.

祝你在使用中得到更快的技術提升。同時**有很好的可讀性。

2樓:誠信是可靠的

樓上的2位回答明顯不靠譜,你插入的最後一個值,對應的列是否數值型的。在插入數值型的列的時候,如果沒有值,要麼插入0,要麼插入null值,插入''就會出現從資料型別 varchar 轉換為 numeric 時出錯。你其他的列都應該沒問題,如果數值的長度夠...

從資料型別 varchar 轉換為 numeric 時出錯.怎麼解決

3樓:秋殤di冬寒

cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 這個得到的是數值型別,而你前面兩個得到的是字元型別,我認為只要把這個直接轉字元就可以了:

to_char(a.num/b.cknum, $99999.99)

從資料型別 varchar 轉換為 numeric 時出錯 10

4樓:海天盛

一、有null值;

二、有「」值;

isnumeric確定表示式是否是有效的數字型別。以下值在sql函式isnumeric()中沒有找到:

1.有「-」值;

2.財務上用的逗號,有「,」值

把以上轉為0,就可以了。

其他:轉小數值一般不要超過5位

5樓:大野瘦子

一、有null值;

二、有「」值;

isnumeric確定表示式是否為一個有效的數字型別。下面這幾個值,用sql函式isnumeric()用查不出來錯誤:

1、有「-」值;

2、財務上用的逗號,有「,」值

把以上轉為0,就可以了。

其他:轉小數值一般不要超過5位

6樓:那時花開應自在

cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 這個得到的是數值型別,而你前面兩個得到的是字元型別,我認為只要把這個直接轉字元就可以了:

to_char(a.num/b.cknum, $99999.99)

7樓:匿名使用者

一個小建議,轉換前用isnumeric()函式試一下,就可以保證不出錯了,

case when isnumeric(123) = 1 then cast(.. as int) else null end

從資料型別varchar轉換為numeric時出錯 怎麼解決

8樓:匿名使用者

cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 這個得到的是數值型別,而你前面兩個得到的是字元型別,我認為只要把這個直接轉字元就可以了:

to_char(a.num/b.cknum, $99999.99)

sql 從資料型別 varchar 轉換為 numeric 時出錯.

9樓:靈魂心心相印

你在設計裡,檢視下,是num的格式的,後面select跟的 num格式空著的就要用 null代替,varchar格式用2個單引號『』代替,百分百好用,希望幫到你

10樓:匿名使用者

是numeric型別的欄位,插入的值不用加單引號.

11樓:

樓上的2位回答明顯不靠譜,你插入的最後一個值,對應的列是否數值型的。在插入數值型的列的時候,如果沒有值,要麼插入0,要麼插入null值,插入''就會出現從資料型別 varchar 轉換為 numeric 時出錯。你其他的列都應該沒問題,如果數值的長度夠長的話。

12樓:發生等將發生

你將型別為numeric的那列轉換一下

cast(『111111111』 as numeric(18,2))

後面的是小數點後的位數,自己看著給

從資料型別 varchar 轉換為 numeric 時出錯。

13樓:匿名使用者

資料型別不一致吧, 如果一致就不報錯了 , 看的是資料庫表結構的欄位定義的型別

從資料型別 nvarchar 轉換為 numeric 時出錯.該怎麼解決

14樓:

cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 這個得到的是數值型別,而你前面兩個得到的是字元型別,我認為只要把這個直接轉字元就可以了:

to_char(a.num/b.cknum, $99999.99)

據型別 varchar 轉換為 numeric 時出錯

15樓:

一定是所執行的sql指令碼中有以下的情況:

1、將一個帶有非數字的字元存入數值型欄位或變數中。

如: declare @abc decimal(12,4)

set @abc='a3.5'就會出現此錯誤。

set @abc='3.5' 就不會出現此錯誤。

2.在convert或cast函式將某字串轉換為數值型資料時,源字串包含非數字字元,就會報此錯誤。如:

select convert(decimal(12,4),'a3.5')

3.在邏輯表示式中試圖比較一個非數字的字元與一個數值型變數時,會發生該錯誤,如

select * from tablename where **》'1000a'

*************************====

不如這樣:

select *

from haoma

where col001>'13400000000'

mysql中的資料型別varchar 255 表示什麼意思

呵呵,在mysql資料庫裡,使用varchar型別比較常見。用char的幾乎不多。char是一種固定長度 的型別,varchar則是一種可變長度的型別,它們的區別是 char m 型別的內資料列清塵裡,每個值容都佔用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足 在檢索操作中...

c語言中資料型別的轉換

include stdio.h main 輸出的資料型別不匹配 給你舉個例子吧 j i 實際j值和i一樣 j i,實際j值比i大一 你還沒明白 i 注意它是在i使用後自動加一printf d i 這是兩句命令,執行完i 後才輸出,i值自然 1 j 它是在使用前加一 printf d j 也是兩句命令...

在C語言中不同的資料型別之間是如何轉換的不同的資料型別是

在c語言中bai,不同資料型別在進du行運算時首zhi先要轉換成同一型別,一dao種是自動轉換,回二是強制轉換,如答 int a 將a強制轉換為int型 轉換原則 箭頭是轉換方向 char,short int unsigned long,float double 說這個題之前要接受一個事實 不同計算...