将空字符串作为NULL插入并将零作为零插入到浮点列中

时间:2016-09-07 12:49:51

标签: sql sql-server insert 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如何在内部转换这些数据类型。

2 个答案:

答案 0 :(得分:2)

嗯,

如果将字符串值插入到浮点列中,则会尝试使用奇怪的东西。

$insert_row =mysql_query("INSERT INTO ActivityProduct (AID,Ideal) VALUES ( '". implode('),(', $_POST["act"]). "' ,'" .implode('),(', $_POST["act"])."')");   

但是你真的应该花一些时间从头开始进行数据类型转换。如果有人试图将字符串插入我的float-column中,我希望调用应用程序出错...

答案 1 :(得分: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