我需要在我的數據庫中查找缺少的數字。我正在比較兩個數據庫,tempdb在查詢中用數字1-999和MYDAT創建。通過連接兩個表將varchar轉換爲int時出現SQL錯誤
MYDAT樣子:
+-------+
| id |
+-------+
| A-001 |
| A-002 |
| A-004 |
| A-... |
| A-952 |
| A-... |
+-------+
我運行此查詢:
declare @tempid int
set @tempid = 1
create table tempdb (tempid int)
while @tempid < 1000
begin
insert into tempdb values(@tempid)
set @tempid = @tempid + 1
end
select tempdb.tempid from tempdb
left join MYDAT on tempdb.tempid = CAST(SUBSTRING(MYDAT.ID, 3, 3) as INT)
where
MYDAT.ID IS NULL and
SUBSTRING(MYDAT.ID, 3, 3) <> '' and
SUBSTRING(MYDAT.ID, 3, 3) <> '000'and
SUBSTRING(MYDAT.ID, 3, 3) NOT LIKE '%[^0-9]%'
drop table tempdb
沒有滴速temdb,select * from tempdb
看起來不錯,我得到我想要的東西。
從MYDAT有選擇和轉換數據的部分做工不錯,我只得到整數
select CAST(SUBSTRING(MYDAT.ID, 3, 3) as INT) fom MYDAT
where
SUBSTRING(MYDAT.ID, 3, 3) <> '' and
SUBSTRING(MYDAT.ID, 3, 3) <> '000'and
SUBSTRING(MYDAT.ID, 3, 3) NOT LIKE '%[^0-9]%'
我得到一個錯誤「轉換爲varchar到int」但我不知道爲什麼。當我將左連接更改爲右連接時,我沒有收到任何錯誤。
我也手動檢查了兩個數據庫,沒有字符串或字符,只有整數。
我也嘗試了CONVERT()但結果相同。
任何建議或想法是什麼問題?
編輯:
1 - 我看到一個錯誤,因爲我試圖在rextester。 I added MYDAT.ID IS NULL
查詢,所以我得到正確的結果。
2 - 範例 我需要這樣的:http://rextester.com/KFG73206
但CAST或CONVERT只是不似乎工作http://rextester.com/WJIAH52304
標記您正在使用的dbms。 (有些產品特定的結構......) – jarlh
這對我來說並不明顯,爲什麼你會得到這個錯誤。你可以在[Rextester](http://www.rextester.com)爲我們創建一個演示,並將鏈接粘貼到這裏? –
http://rextester.com/CSY70642我能想到的唯一的事情就是在MYDAT中的ID不是你的想法..因爲這看起來像它的工作原理..如何在架構中定義ID類型,長度等。 – JGFMK