Bases de Datos > SQL Server
Ayudilla
mateamargo:
--- Cita de: "JuanK" ---
--- Citar ---También dijiste algo sobre Access. La cuestión es que las sintaxis de SQL son indistintas a las bases de datos donde se las apliquen.
--- Fin de la cita ---
en teoria ...
pero las sentencias que has usado no funcionan en ORACLE, en MYSQL (al menos la version que tengo) ni en SYBASE.
--- Fin de la cita ---
¿Qué error te aparece?
¿estás seguro que esos lenguajes soportan el ANSI a parte de su adaptación?
JuanK:
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] p.clap_producto, p.grup_producto
FROM ENCA_FACTURA f, PRODUCTO p
WHERE f.efac_fecha BETWEEN '2005-01-01' AND '2005-01-25'
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
Arroja el error:
--- Citar ---ORA-01861 literal does not match format string
--- Fin de la cita ---
Lo cual segun Knowledge Xpert para PL/SQL es:
--- Citar ---Cause: Literals in the input must be the same length as literals in the format string (with the exception of leading white space). If the "FX" modifier has been toggled on, the literal must match exactly, with no extra white space.
Action: Correct the format string to match the literal.
--- Fin de la cita ---
Como te comente es debido a que el between no funciona de esa maner en los motores de bases de datos estandart (SQL Server por muchas razones no lo es)
El between solo puede decir si una variable numerica se encuentra entre un rango de numeros estrablecido, y una fecha no es un numero asi que hay que hacer nua conversion
Asi que la forma correcta de usarlo es:
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] p.clap_producto, p.grup_producto
FROM ENCA_FACTURA f, PRODUCTO p
WHERE TO_NUMBER (TO_CHAR (f.efac_fecha, 'yyyymmdd')) BETWEEN 20050101 AND 20050125
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
Lo cual convuierte el dato tipo fecha a nuo tipo char con un formato especifico, y seguidamente se convierte a number con el fin de poder realizar la comparacion numerica.
Otra opcion seria
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] p.clap_producto, p.grup_producto
FROM ENCA_FACTURA f, PRODUCTO p
WHERE TO_CHAR (f.efac_fecha, 'yyyymmdd') BETWEEN '20050101' AND '20050125'
<!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->
Ya que la conversion de una cadena de texto que represente literalmente un numero se realiza de manera automatica.
Navegación
[*] Página Anterior
Ir a la versión completa