下面的代码不应该返回0吗?
SELECT REPLACE(ISNULL('',0),'',0)
Run Code Online (Sandbox Code Playgroud)
这也不返回0....
SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)
我在包含数值的表中有一个 nvarchar 字段,但有时为空(不为空)。
我有一个查询,检查该字段是否<另一个字段中的数字,但我得到
“将数据类型 nvarchar 转换为数字时出错。”
如果该字段为空,则会出错。我试图在查询执行期间将空白值 ('') 转换为零,这样我就不会收到转换错误,但我刚刚意识到
SELECT REPLACE('','',0)
Run Code Online (Sandbox Code Playgroud)
不会将空白字段转换为 0。
我尝试使用下面的代码来尝试避免转换错误,但是当阈值字段为空时它没有像我预期的那样评估为 0:
SELECT CAST(REPLACE(ISNULL(Threshold,0),'',0) as decimal(4,2))
Run Code Online (Sandbox Code Playgroud)
当阈值字段为空时,如何让代码评估为 0。
我猜我可以写一个 if 或 case 语句来跳过空白 ('') 值阈值,但我认为必须有一种方法可以全部内联,就像我试图用上面的代码做的那样.
ISNULL('','0')
Run Code Online (Sandbox Code Playgroud)
返回第一个参数''(原样not null)所以你的问题归结为问为什么
SELECT REPLACE('','','0')
Run Code Online (Sandbox Code Playgroud)
不回0。
REPLACE状态文件
string_pattern是要查找的子字符串。string_pattern 可以是字符或二进制数据类型。string_pattern不能是空字符串 (''),并且不能超过适合页面的最大字节数。
TSQL 在这方面并不罕见。
在 C# 中尝试"Some String".Replace("", "0")会给出错误“字符串不能为零长度”。
这并不奇怪,因为在任何文本字符串中,您都可以争辩说有无限多个空字符串。
这句话开头的“T”和“h”之间可能有 20 个。由于它们的长度为零,我们怎么知道?
对于您的实际用例,您可以使用
SELECT CASE
WHEN Threshold <> ''
THEN CAST(Threshold AS DECIMAL(4, 2)) --Not null and not empty string
ELSE 0
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |