【发布时间】:2016-09-07 12:49:51
【问题描述】:
我有一个浮动列,叫它钱。
我正在尝试将 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 如何在内部转换这些数据类型。
【问题讨论】:
-
您是否还要插入其他列?表中的
money字段是否设置为NOT NULL?因为如果您有其他列并且此列未设置为NOT NULL,那么就不要将其包含在插入... -
Re: 你的最后一句话,SQL Server 的数据类型转换记录在 MSDN 上:msdn.microsoft.com/en-us/library/ms191530.aspx
-
@johnhc 我正在插入更多列,其中很多是浮点类型,所有列都允许为 NULL。
-
金钱作为浮点数据类型 = 坏主意。至于 null...
INSERT INTO t1 (money) values (NULL)或 `INSERT INTO t1 (money) values (case when '' = '' then null else '') -
@xQbert 该列实际上是 AccruedInterest 我将其简化为金钱阅读目的
标签: sql sql-server insert null