2010-06-23 18 views
6

Tengo una columna de tipo RAW en mi base de datos. ¿Cómo puedo usarlo en where clause?
es decir, para obtener sólo los valores con tercer byte igual a 4.
esto no funciona:oracle raw datatype in where cláusula

SELECT v from T where v[3]=4 
+0

Reetiquetado: - sql. – pakore

Respuesta

8

utilizar las funciones del paquete UTL_RAW para interactuar con raws, por ejemplo:

SQL> create table test (a raw(16)); 

Table created 

SQL> insert into test values ('FF00FF00FF'); 

1 row inserted 

SQL> select * from test where utl_raw.substr(a, 3, 1) = 'FF'; 

A 
-------------------------------- 
FF00FF00FF 
+0

El enlace UTL_RAW de arriba da un 404. El siguiente enlace funciona, aunque hoy: https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_raw.htm#BABFGDDG – anjanb

+0

@anjanb: gracias, he actualizó el enlace –

0

También se puede usar la función REGEXP_LIKE para seleccionar filas con el tipo de datos SIN PROCESAR:

select * from test where REGEXP_LIKE(a,'^....04.*')"; 

En mi caso de uso, este método es un poco más rápido que utl_raw.substr.