【问题标题】:peculiar teradata clause, Column_Name >= ''特殊的 teradata 子句,Column_Name >= ''
【发布时间】:2016-08-30 04:42:02
【问题描述】:

我有一个不再在这里工作的人为 teradata 写的 statament,所以我不能直接问他。
在本声明中,where 中的最后一个子句是:... and Column_Name >= ''。我不知道该子句应该做什么。
如果重要的话 Column_name 是 [decimal](7,0) NULL

有人可以向我解释该条款接受哪些案件,哪些案件被拒绝?
对我来说,它的接缝应该允许所有内容,因为所有内容都主要或等于 null

【问题讨论】:

  • 当您将字符串与数值进行比较时,字符串将转换为FLOAT,在您的情况下,空字符串'' 被视为0,所以这只是一种愚蠢的方式检查Column_Name >= 0 并过滤负值和NULL。你永远不知道这是否真的是写它的人的意图:)
  • 哦,好的,谢谢,我想它可能是这样的,但我们没有任何 teradata 服务器(这是一个复杂的情况)来测试究竟是如何。如果你想把它写成答案,我很乐意接受!

标签: teradata


【解决方案1】:

当您将字符串与数值进行比较时,字符串将转换为FLOAT,在您的情况下,空字符串'' 被视为0,因此这只是检查@987654324 的愚蠢方法@ 和过滤负值和 NULL。你永远不知道这是否真的是写它的人的意图:)

【讨论】:

    【解决方案2】:

    当 >='' 子句应用于字符列时,它将限制空记录。

    如果表有2列一Region_cd & rank_nr,表中的数据如下:-

    select * from databasename.tablename;
    
     *** Query completed. 5 rows found. Two column returned. 
     *** Total elapsed time was 1 second.
    
    Region    |      rank_nr
    ----------     -----------
    emea      |          1
    amr       |          2
    apac      |          3
    ?         |          4
              |          5
    

    ? is 表示 NULL 并且 region_cd 列中 rank=5 的空间不可见

    如果我们在此表中使用 where 子句作为 Region>='' 进行查询,则结果将低于 4 行:-

    select * from databasename.tablename where Region_cd >='' ;
     *** Query completed. 4 rows found. 2 columns returned. 
     *** Total elapsed time was 1 second.
    
    col1      |    rank_nr
    ---------- -----------
    emea      |          1
    apac      |          3
    amr       |          2
              |          5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2018-07-31
      • 2015-06-19
      • 2018-09-25
      • 2017-04-01
      • 2010-09-25
      • 2010-10-17
      相关资源
      最近更新 更多