Sql Oracle中数字与字符串的比较
我有一个查询,返回以下示例数据:-Sql Oracle中数字与字符串的比较,sql,oracle,Sql,Oracle,我有一个查询,返回以下示例数据:- SELECT * FROM VW_STATUSNEW ID STATUS_1 STATUS_2 1 FAIL 1 2 FAIL NULL 3 1 NULL 4 NULL 2 5 2 2 6 2 FAIL 7 NULL NULL 在Oracle中是否可以返回状态_1和状态_2不匹配的所有行。因此,使用上述数据,所需结果为:- ID STATUS_1 STATUS_2 1
SELECT * FROM VW_STATUSNEW
ID STATUS_1 STATUS_2
1 FAIL 1
2 FAIL NULL
3 1 NULL
4 NULL 2
5 2 2
6 2 FAIL
7 NULL NULL
在Oracle中是否可以返回状态_1和状态_2不匹配的所有行。因此,使用上述数据,所需结果为:-
ID STATUS_1 STATUS_2
1 FAIL 1
2 FAIL NULL
3 1 NULL
4 NULL 2
6 2 FAIL
问题似乎在于将单词FAIL与数字进行比较,并考虑空值。这两种状态的类型相同(两列中都有字符串)。所以比较不应该是个问题。这里有一个方法:
SELECT *
FROM VW_STATUSNEW
WHERE (status1 <> status2) OR
(not (status1 is null and status2 is null)) ;
选择*
来自VW_STATUSNEW
其中(状态1状态2)或
(非(状态1为空,状态2为空));
这两种状态的类型相同(两列中都有字符串)。所以比较不应该是个问题。这里有一个方法:
SELECT *
FROM VW_STATUSNEW
WHERE (status1 <> status2) OR
(not (status1 is null and status2 is null)) ;
选择*
来自VW_STATUSNEW
其中(状态1状态2)或
(非(状态1为空,状态2为空));
演示
演示
试试这个:
SELECT
ID
,STATUS_1
,STATUS_2
FROM VW_STATUSNEW
where NVL(STATUS_1, '0') != NVL(STATUS_2, '0')
试试这个:
SELECT
ID
,STATUS_1
,STATUS_2
FROM VW_STATUSNEW
where NVL(STATUS_1, '0') != NVL(STATUS_2, '0')
返回
Stat1 Stat2
Fail 1
Fail null
1 null
null 2
2 FAIL
在您的示例中,Stat1=状态_1
nvl(value,altValue)
如果value
为空,则返回altValue
返回
Stat1 Stat2
Fail 1
Fail null
1 null
null 2
2 FAIL
在您的示例中,Stat1=状态_1
nvl(value,altValue)
返回altValue
如果value
为null这是DECODE
仍然有用的少数情况之一,因为根据DECODE,null等于null
select *
from VW_STATUSNEW
where decode(status_1, status_2, 1, 0) = 0;
这是
DECODE
仍然有用的少数情况之一,因为根据DECODE,NULL等于NULL
select *
from VW_STATUSNEW
where decode(status_1, status_2, 1, 0) = 0;
如果两列都为空怎么办?为什么您认为数字和字母字符串会失败?因为两种数据类型都不是数字,所以不需要。请理解这个问题,不要盲目假设。问题只在于空比较,仅此而已。如果两列都为空会怎么样?为什么你认为数字和字母字符串会失败?因为两种数据类型都不是数字,所以不需要。请理解这个问题,不要盲目假设。问题仅限于空比较,仅此而已。NVL(null“”)将不起作用。它将为您提供空值,而null无法进行比较。我不确定这是否会按您希望的方式工作-空字符串在OracleRun中等于空,请选中
选择NVL(null“”)从DUAL
中,如果状态_1
为0
而状态_2
为NULL
,该怎么办?它们不应该匹配,但与您的查询匹配。它将不起作用NVL(null“”)将为您提供null且null无法比较我不确定这是否会按您希望的方式工作-空字符串在OracleRun中等于null并选中SELECT NVL(null“”)从DUAL
中,如果状态_1
为0
而状态_2
为NULL
,该怎么办?它们不应该匹配,但与您的查询匹配。