访问语句转换为 Sql
Posted
技术标签:
【中文标题】访问语句转换为 Sql【英文标题】:access statement convert to Sql 【发布时间】:2017-11-01 14:04:55 【问题描述】:这个怎么转换成T-Sql?
IIf([ESSValue]<>0,Int([ESSValue]*100),"")
【问题讨论】:
sql 中的 if/else 逻辑通常使用case when
关键字完成。
这是 TSQL。如果您正在对整数进行操作,则不能返回字符串值。请尝试使用 null。
[ESSValue]
是什么类型??为什么将其转换为整数?为什么默认是“”......在Sql中你不能为同一个字段返回两种不同的类型
[ESSValue] 浮点型
【参考方案1】:
我认为以下内容几乎可以满足您的要求:
select coalesce(cast(EssValue * 100 as int), 0)
这里是想法。与零的比较并不重要,因为任何值的 0 倍都将为零。 iif()
返回一个整数(我认为),因为“then”参数是一个整数;空字符串被转换为零。
我不能 100% 确定关于 MS Access 的最后一条语句,但这就是 iif()
在 SQL Server 中的工作方式。
我应该补充。虽然我不赞成将iif()
用于条件表达式(因为case
是标准且更强大),但SQL Server 确实支持它。所以你可以写:
IIf([ESSValue]<>0, cast([ESSValue]*100 as int), '')
注意:正如我之前提到的,''
将被转换为0
。
【讨论】:
【参考方案2】:CASE WHEN ESSValue <> 0
THEN CAST(ESSValue * 100 AS INT)
ELSE NULL
END as fieldname
对于 case 表达式,如果不满足任何条件,则默认为 NULL
,因此您实际上不需要 ELSE
条件
【讨论】:
原始语句永远不会返回NULL
。以上是关于访问语句转换为 Sql的主要内容,如果未能解决你的问题,请参考以下文章