Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中数字与字符串的比较_Sql_Oracle - Fatal编程技术网

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
,该怎么办?它们不应该匹配,但与您的查询匹配。