A. sql語句的聯合查詢,提示無效數字
是連接字元串不能用+;
換成'%' || a.sys_name || '%'試試。
B. 把表A的內容復制到B中,執行SQL語句時提示ora-01722無效數字
這么插入數據的時候要保證相對應的欄位意義對應,比如你的一地個表有個id欄位,對應第二張表的pid欄位
那麼寫法就是
insert into table1(id) select pid from table2;
數據類型長度可以不同,但是數據類型的大類必須相同否則無法是插入,比如數字類,字元類等等,但是1表的數據類型的允許長度不能小於2表數據的實際長度。
C. java.sql.SQLException: ORA-01722: 無效數字
一個查詢 select to_number(c.name) as srvtype, value as typename from sys_code c where c.srvclass=9 --srvclass為字元型
一直工作得很好,但突然一天返回錯誤ORA-01722 invalid number。由於條件srvclass欄位是varchar2類型,就想當然地以為是ORACLE的bug(恰巧上周剛確認了ORACLE的一個查詢bug),將條件改寫成c.srvclass='9'後,查詢就又能運行了。
事情雖然過去了,可總覺得有點不對勁。首先ORACLE不可能出現這么簡單的BUG;其次就算是BUG,返回的錯誤提示也不應該是 invalid number。按理說,即使ORACLE不能自動完成類型轉換而要求寫成 srvclass='9',那麼對srvclass=9這種寫法的錯誤提示也應該是invalid character。但由於直覺作怪,也就沒有深究
正好space6212提出了他對bug解釋的疑問,我就從頭進行檢查,才發現錯誤的根本原因是:ORACLE將where c.srvclass=9解釋為where to_number(c.srvclass)=9
1)以前執行SQL時,ORACLE進行全表掃描,對每行的srvclass都轉換為number型進行比較.以前表中的srvclass的取值只有字元0到9,所以沒有出錯;
2)後來表中加入了新數據,srvclass的取值都是字母串,ORACLE進行全表掃描時,對新行上srvclass的to_number轉換當然就返回ORA-01722 invalid number了。
D. SQL語句一直報無效數字的錯,為什麼
SELECT COUNT(IN_DATE)
FROM CAR_GOODS_INFO
WHERE TO_DATE(IN_DATE, 'yyyy-MM-dd HH24:mi:ss') BETWEEN
TO_DATE('2014-04-25 00:00:00', 'yyyy-MM-dd HH24:mi:ss') AND
TO_DATE('2014-04-25 23:59:59', 'yyyy-MM-dd HH24:mi:ss')
GROUP BY SUBSTR(IN_DATE, 12, 2);
改成這樣子,你最後又把IN_DATE當做date用了
E. 安裝sql 2012安裝到最後一步,它說無效數字簽名,cab文件損壞
*\2052_CHS_LP\redist\VisualStudioShell\VSSetup
右鍵文件夾裡面的cab文件,屬性 --選擇數字簽名,雙擊簽名列表裡面的信息 在彈出窗口中點擊查看證書,然後看下有效期是否包含你的當前時間,如不包含,把系統時間改到有效期內!
F. SQL為什麼會報出「無效數字錯誤」
在表 etl_rdm.odm_pa_bal_int_bak_20150331 里,project_id有可能存在不是數字的記錄行。
G. SQL語句中比較時間時提示無效數字,報錯
'yyyy-mm-dd'是不能轉換成數字的,比較大小時需要轉換成數字,轉換失敗,所以報錯。
建議如下:
首先是#ftime1# 和 #ftime2#是什麼格式?要改成YYYYMMDD格式,因為這樣的能夠轉換成數字;
然後to_char(fsigndate,'yyyy-mm-dd') 改成 to_char(fsigndate,'YYYYMMDD')。
這樣就沒有問題了。
H. SQL中,使用NVL函數,報錯:ora-01722:無效數字
nvl 是用來 當資料庫欄位為空時,強制指定欄位的值。 如nvl(abc,0) 表示abc為空的時候,返回值為0 ,可以先用select 的方式把影響的行查出來,看是否where 語句錯誤,如果沒有錯,再檢查update 部分的語句是否不正確,很簡單就能排查問題的 。
I. 下面這段SQL提示「無效的數字文字」,怎麼修改
SELECT COUNT(IN_DATE)
FROM CAR_GOODS_INFO
WHERE TO_DATE(IN_DATE, 'yyyy-MM-dd HH24:mi:ss') BETWEEN
TO_DATE('2014-04-25 00:00:00', 'yyyy-MM-dd HH24:mi:ss') AND
TO_DATE('2014-04-25 23:59:59', 'yyyy-MM-dd HH24:mi:ss')
GROUP BY SUBSTR(IN_DATE, 12, 2);
改成這樣子,你最後又把IN_DATE當做date用了
J. sql刪除時候提示無效數字 但另一張表不提示 數據類型都一樣
sqlserver里
你看下你第一條的那個t_job_experience表裡的id列
其他行中應該有不為數字的列,比如字母,漢字,標點等,所以這個時候資料庫隱性的認為你傳的那一串數字不是字元型,而是數字型
所以還是要加單引號的
隨便做個測試,你可以自己試驗一下,分步執行以下幾條語句
createtablet(idchar(10))
insertintotvalues('123')
select*fromtwhereid='123'
select*fromtwhereid=123
insertintotvalues('a123')
select*fromtwhereid='123'
select*fromtwhereid=123