[英]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.