“case when index”语句如何与“case index”语句进行比较

时间:2013-04-30 00:40:12

标签: sql sql-server oracle case teradata

我试图研究这个命令,但我似乎找不到具体的解释。

什么是“索引时的情况”?它有什么作用?它与案例有什么不同? 什么时候使用? 这可用于其他RDMS还是特定于Teradata? 如果你能提供一些例子,我会的。

非常感谢你。

sel
CASE    WHEN .00 = 0 THEN 0||'.' 
ELSE    .00 
END
,CASE   WHEN INDEX (.00,'.') = 0 THEN 0||'.' 
ELSE    .00 
END

结果:

  0.     .00

3 个答案:

答案 0 :(得分:1)

Index()是Teradata函数。你可以阅读它here。您可以对其他数据库引擎执行相同的操作,但不能使用该语法。

答案 1 :(得分:1)

Oracle和SQL Server都支持

CASE。查找字符串位置的功能不同。

  • 在Oracle中,使用INSTR并输入字符串以搜索第二个:

    INSTR('abcd', 'b')
    
  • 在SQL Server中,使用CHARINDEX并将字符串首先搜索:

    CHARINDEX('b', 'abcd')
    

上述每一项的返回值均为2。在默认安装中,Oracle函数区分大小写,而SQL Server搜索则不区分,但最好不要假设它们。

答案 2 :(得分:1)

SELECT -- Performs logical test of two numeric values (.00 = 0)
       CASE WHEN .00 = 0 
            THEN 0||'.' 
            ELSE .00 
       END
       -- Checks for the location of the of '.' in the string '.00'.
       -- In this test it returns 1. 1 <> 0.         
     , CASE WHEN INDEX (.00,'.') = 0  
            THEN 0||'.' 
            ELSE .00 
       END

INDEX()是ANSI SQL:2008标准的Teradata扩展。 POSITION()是ANSI SQL:2008兼容的等价物。 POSITION('.' IN '.00)