简体   繁体   English

如何将Sql转换为Oracle查询

[英]How To Convert Sql to Oracle Query

I have sql query like :- 我有SQL查询,例如:

SELECT CASE WHEN (NOT EXISTS(SELECT NULL 
FROM [Customers] AS t0
WHERE NOT (LEN(t0.[ContactName]) > 0)
)) THEN 1 ELSE 0 END AS [value]

Please let me know how I can convert to oracle query? 请让我知道如何转换为oracle查询? Thanks in advance. 提前致谢。 Joon

In Oracle, an empty string and NULL are identical so LENGTH( NULL ) and LENGTH( '' ) will both give NULL and not 0 . 在Oracle中,空字符串和NULL相同,因此LENGTH( NULL )LENGTH( '' )都将给出NULL而不是0

So your query would be: 因此,您的查询将是:

SELECT CASE
       WHEN NOT EXISTS(
         SELECT 1 
         FROM   Customers
         WHERE  ContactName IS NULL
       )
       THEN 1
       ELSE 0
       END AS value
FROM   DUAL

Update : 更新

What if I want to find out all records has length of contactname bigger than 3 如果我想查找所有记录的contactname长度大于3怎么办

SELECT CASE
       WHEN NOT EXISTS(
         SELECT 1 
         FROM   Customers
         WHERE  LENGTH( ContactName ) <= 2
         OR     ContactName IS NULL
       )
       THEN 1
       ELSE 0
       END AS value
FROM   DUAL

or 要么

SELECT CASE
       WHEN NOT EXISTS(
         SELECT 1 
         FROM   Customers
         WHERE  COALESCE( LENGTH( ContactName ), 0 ) <= 2
       )
       THEN 1
       ELSE 0
       END AS value
FROM   DUAL

Note: to use an index you will need a function-based index on LENGTH( ContactName ) or COALESCE( LENGTH( ContactName ), 0 ) for the respective examples. 注意:要使用索引COALESCE( LENGTH( ContactName ), 0 )对于相应的示例COALESCE( LENGTH( ContactName ), 0 )您需要在LENGTH( ContactName )COALESCE( LENGTH( ContactName ), 0 )上基于函数的索引。

If your SQL checks "if there exists an empty contact name in the customers table" then you can use the oracle queries below. 如果您的SQL检查“客户表中是否存在空联系人姓名”,则可以使用下面的oracle查询。

SELECT DECODE(cnt, 0, 0, 1)
  FROM (SELECT COUNT(1) cnt
          FROM customers
         WHERE NOT NVL(LENGTH(contact_name), 0) > 0);

or 要么

SELECT DECODE(cnt, 0, 0, 1)
  FROM (SELECT COUNT(1) cnt
          FROM customers
         WHERE contact_name IS NULL);

to avoid null error use nvl function: 为了避免空错误,请使用nvl函数:

SELECT
  CASE
    WHEN (NOT EXISTS
      (SELECT NULL FROM Customers t0 WHERE NOT NVL(LENGTH(t0.ContactName),0) > 0
      ))
    THEN 1
    ELSE 0
  END val
FROM DUAL;

I got it like that: 我是这样的:

SELECT CASE WHEN (NOT EXISTS(SELECT NULL FROM Customers  t0 WHERE NOT 
    LENGTH(t0.ContactName) > 0)) THEN 1 ELSE 0 END val
FROM DUAL

thanks all 谢谢大家

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM