【问题标题】:access statement convert to Sql访问语句转换为 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] 浮点型

标签: sql sql-server tsql ms-access


【解决方案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
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多