【问题标题】:Insert empty string as NULL and zero as zero into float column将空字符串作为 NULL 和零作为零插入浮点列
【发布时间】: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


【解决方案1】:

嗯,

如果您将字符串值插入浮点列,您会尝试一些奇怪的事情。

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

但您应该真正投入一些时间从头开始进行数据类型转换。如果有人试图将字符串插入到我的浮点列中,我希望调用应用程序会出错...

【讨论】:

  • 我喜欢“如果你将字符串值插入浮点列,你会尝试一些奇怪的事情。” :P
【解决方案2】:

你可以试试这个方法

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

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2014-10-12
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多