2016-09-07 98 views
1

我有一個浮動列,稱它爲錢。將空字符串作爲NULL和零作爲零插入浮動列

我試圖插入0值0和空字符串值應該是NULL

INSERT INTO t1 (money) values ('0.00') 
INSERT INTO t1 (money) values ('') 

SELECT * FROM t1 

這是結果,我想實現

money 
    0 
    NULL 

我試着用一個INSTEAD OF INSERT觸發器(我用'123'來顯示滿足哪種條件)

iif(CAST(money AS nvarchar) = '', NULL, iif(money < '0.0001', '123', money)) 

SELECT * FROM t1 

money 
123 
123 

所以,我似乎無法將我的浮動列與空字符串進行比較。

但是,試圖跟隨它看起來像實際上這是可能的時候:

CASE WHEN (money = '' THEN '456' ELSE iif(money < '0.0001', '123', money)) 

SELECT * FROM t1 

money 
456 
456 

這讓我非常不確定如何SQL Server的數據類型的轉換內部。

+0

你插入其他列呢?您表中的「money」字段是否設置爲「NOT NULL」?因爲如果你有其他的列,並且這個列沒有設置爲'NOT NULL',那麼就不要在插入文件中包括它...... – JohnHC

+1

Re:你最後的聲明,SQL Server的數據類型轉換記錄在MSDN上:https: //msdn.microsoft.com/en-us/library/ms191530.aspx – alroc

+0

@johnhc我插入了很多列,其中很多是浮點類型,它們都允許爲NULL。 – Mance

回答

2

嗯,

您嘗試怪異的事情,如果您將字符串值轉換爲一個float列。

INSERT INTO t1 (money) values (nullif('0.00', '')) 

,但你確實應該投資於從底層向上數據類型轉換一段時間。我希望調用的應用程序有一個錯誤,如果有人試圖插入一個字符串到我的浮動列...

+0

聖潔的莫爾,這個作品!感謝隊友:) – Mance

+1

我喜歡,「如果你插入字符串值到浮動列,你嘗試奇怪的事情。」 :P – xQbert

1

你可以試試這個方法

declare @valuetobeinserted varchar(20) 
set @valuetobeinserted = '0.00' 
insert into t1 select case when @valuetobeinserted = '' then null else @valuetobeinserted end as m 

set @valuetobeinserted = '' 
insert into t1 select case when @valuetobeinserted = '' then null else @valuetobeinserted end as m