如何在oracle SQL中比较十六进制值

如何在oracle SQL中比较十六进制值,sql,oracle,Sql,Oracle,我有一个十六进制值的列,我想和下面的其他十六进制值进行比较,但我得到的结果不准确 SELECT vc_vin_vis_start_range FROM ok_dc.gms3_vc_mme_vin_si_detail WHERE TO_NUMBER(vc_vin_vis_start_range) >= TO_NUMBER('100001'); 是否有一种方法可以比较查询中的两个十六进制值 感谢您的帮助 使用TO\u数字(十六进制值,'xxxxxxxxx')(其中xs的数字是十六进制V

我有一个十六进制值的列,我想和下面的其他十六进制值进行比较,但我得到的结果不准确

SELECT vc_vin_vis_start_range FROM ok_dc.gms3_vc_mme_vin_si_detail
   WHERE TO_NUMBER(vc_vin_vis_start_range) >= TO_NUMBER('100001');
是否有一种方法可以比较查询中的两个十六进制值

感谢您的帮助

使用
TO\u数字(十六进制值,'xxxxxxxxx')
(其中
x
s的数字是十六进制
VARCHAR2
列的最大长度):

Oracle安装程序

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002
查询

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002
输出

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002
使用
TO\u数字(十六进制值,'xxxxxxxxx')
(其中
x
s的数字是十六进制
VARCHAR2
列的最大长度):

Oracle安装程序

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002
查询

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002
输出

CREATE TABLE ok_dc.gms3_vc_mme_vin_si_detail ( vc_vin_vis_start_range ) AS
  SELECT '1'      FROM DUAL UNION ALL
  SELECT 'FFFFF'  FROM DUAL UNION ALL
  SELECT '100001' FROM DUAL UNION ALL
  SELECT '100002' FROM DUAL UNION ALL
  SELECT NULL     FROM DUAL;
SELECT vc_vin_vis_start_range
FROM ok_dc.gms3_vc_mme_vin_si_detail
WHERE TO_NUMBER(vc_vin_vis_start_range, 'xxxxxxxxxx') >= TO_NUMBER('100001', 'xxxxxxxxxx');
VC_VIN_VIS_START_RANGE
----------------------
100001
100002

假设列
vc\u vin\u vis\u start\u range
没有空值,那么我将执行以下操作:

SELECT vc_vin_vis_start_range FROM ok_dc.gms3_vc_mme_vin_si_detail
   WHERE TO_NUMBER(vc_vin_vis_start_range, 
                   rpad('x', length(vc_vin_vis_start_range) , 'x'))
      >= TO_NUMBER('100001', 'xxxxxx');

rpad()
函数根据要转换的每个值构建十六进制格式。

假设列
vc\u vin\u vis\u start\u range
没有空值,那么我将执行以下操作:

SELECT vc_vin_vis_start_range FROM ok_dc.gms3_vc_mme_vin_si_detail
   WHERE TO_NUMBER(vc_vin_vis_start_range, 
                   rpad('x', length(vc_vin_vis_start_range) , 'x'))
      >= TO_NUMBER('100001', 'xxxxxx');

rpad()?有多少?@标签大小变量列
vc\u vin\u vis\u start\u range
中的所有数字大小(位数)是否完全相同?多少?@司机尺码不一,非常感谢。看起来这两个解决方案都在运行我之所以接受另一个解决方案,只是因为在它上面创建函数索引很容易。非常感谢你的时间。谢谢,非常感谢。看起来这两个解决方案都在运行我之所以接受另一个解决方案,只是因为在它上面创建函数索引很容易。非常感谢你的时间。谢谢