下面的代码不应该返回 0 吗?
SELECT REPLACE(ISNULL('',0),'',0)
这也不返回 0....
SELECT REPLACE('','',0)
我在包含数值但有时为空(非空)的表中有一个 nvarchar 字段。
我有一个查询,检查该字段是否 < 另一个字段中的数字,但我得到
“将数据类型 nvarchar 转换为数字时出错。”
如果该字段为空,则会出错。我试图在查询执行期间将空白值 ('') 转换为零,这样我就不会收到转换错误,但我刚刚意识到
SELECT REPLACE('','',0)
不会将空白字段转换为 0。
我尝试使用下面的代码来尝试避免转换错误,但是当阈值字段为空时它没有像我预期的那样评估为 0:
SELECT CAST(REPLACE(ISNULL(Threshold,0),'',0) as decimal(4,2))
当阈值字段为空时,如何让代码评估为 0。
我猜想我可以编写一个 if 或 case 语句来跳过空白 ('') 值阈值,但我认为必须有一种方法可以内联完成所有操作,就像我试图用上面的代码做的那样.
返回第一个参数
''
(原样not null
)所以你的问题归结为问为什么不回来
0
。REPLACE
状态文档TSQL 在这方面并不罕见。
在 C# 中,尝试
"Some String".Replace("", "0")
会给出错误“String cannot be of zero length”。这并不奇怪,因为在任何文本字符串中您都可以争辩说有无限多个空字符串。
这句话开头的“T”和“h”之间可能有 20 个。由于它们的长度为零,我们怎么知道呢?
对于您的实际用例,您可以使用