Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como TSQL

[php+oracle] Función explode() retorna array con valores cero

Hola a todos! Hoy les comparto un tip que acabo de aprender, tras horas de análisis de un extraño fallo que ocurría en mi programación al usar la función PHP explode() . El fallo que ocurría era que al ejecutarlo sobre un string , los valores retornados en el array resultante, eran todos igual a cero , en vez de ser los substrings esperados. Ejemplo: $cadena = "Hola, mundo" ; $array = explode ( "," , $cadena); Al revisar el valor de $array , me salía esto: Array(    [0] => 0,    [1] => 0 ) En vez de esto: Array(    [0] => "Hola",    [1] => " mundo" ) Al principio, pensé que el separador, la coma, tal vez no era tal, y que era un caracter "similar" a la coma, y entonces debía usar ese caracter "similar" como separador. Por ello, reemplacé el uso de explode() por preg_split() , en la cual puedo usar expresiones regulares como separador. Pero no resultó, pues el caracter, la coma "similar", era exactament...

[tsql] Error: La instrucción INSERT EXEC no se puede anidar

Holas a todos. Mientras programaba un procedimiento almacenado, intenté obtener los datos de otro procedimiento, como lo he venido haciendo desde que descubrí tamaña maravilla de la programación sql. Pero hoy me topé con este extraño error: La instrucción INSERT EXEC no se puede anidar . Tras investigar por algunos lados, di con la respuesta: no se puede almacenar en una tabla temporal de procedimiento almacenado, el resultado de otro procedimiento que también esté realizando una inserción de este tipo. Esto es algo como tener: CREATE PROCEDURE miProcedimiento AS  INSERT INTO #tablita EXEC otroProcedimiento;  SELECT * FROM #tablita; END; CREATE PROCEDURE nuevoProcedimiento AS  INSERT INTO #tabla1 EXEC miProcedimiento; END; Esto significará que si ejecuto: EXEC nuevoProcedimiento; ...SQL me arrojará el error antes mencionado. La solución al problema es no llamar a un procedimiento que esté llamando a otro ya en su interior. En algunos lados ...

[sql] Búsqueda por palabras en una frase

Holas de nuevo. Esta vez les he traído un tip especial para principiantes ultra novatos en desarrollo de consultas a bases de datos ^^. Se trata del método que uso para poder hacer consultas a una tabla, filtrando los resultados de acuerdo una frase de búsqueda. Usaré sentencias en TSQL y lenguaje PHP para hacer los ejemplos. Todos sabemos cómo hacer una consulta teniendo una palabra o frase exacta de búsqueda: SELECT * FROM tabla WHERE campo LIKE '%palabra o frase clave%'; Si queremos aplicar la palabra o frase de búsqueda en varias columnas, la sintaxis sería: SELECT * FROM tabla WHERE campo1 LIKE '%palabra o frase clave%' OR campo2 LIKE '%palabra o frase clave%'; ...añadiendo todas las columnas deseadas a continuación, siempre separando con el OR. Si hubiesen más condiciones de filtro, sería encapsular todos los elementos separados por OR, dentro paréntesis redondo: SELECT * FROM tabla WHERE campoX = 'valor' AND (campo1...

[tsql] División da resultado INTEGER y se requiere que dé DECIMAL

Este es otro pequeño tip para programadores :) Si se han encontrado con este pequeño detalle al ejecutar una división en una consulta TSQL: SELECT 25 / 3; Resultado: 8 Y ustedes esperaban: 8.333 Pues la solución es bastante sencilla, ya que parte de la explicación a este comportamiento de TSQL (no lo he comprobado con Mysql). TSQL retorna el resultado de la operación en el mismo formato o tipo de datos en que vienen todos los operandos. Por lo tanto, si dividimos dos números enteros, el resultado también será un entero. Precisamente aquí es donde TSQL hace su magia no requerida: aproxima hacia abajo cualquier decimal (por no decir que hace un TRUNCATE al número, dejándonos sólo con la parte entera -_-). Por lo tanto, si queremos que el resultado nos muestre los decimales que corresponde, pues... ¡transforma tu número entero en un decimal! :D SELECT 25.0 / 3; Resultado: 8.333333 Voilà! ;D Si tu número viene en una variable, pues conviértelo a decimal y ya está: ...

[sql] WHERE campo IN (SELECT...)

Holas a todos. Dejo acá otro consejillo programadorístico, de nuevo relacionado con consultas a bases de datos. El caso es que en muchas ocasiones, como programadores, nos damos mucho trabajo en filtrar los datos que solicitamos a la base de datos, cuando el mismo servidor de la base nos puede hacer todo o gran parte del trabajo. No hablo de procedimientos ni funciones almacenadas, sino de meras consultas. En el día de hoy, abordaré un tip que puede ser de utilidad para los principiantes :) Herramienta a usar: Conector IN Cómo se usa: Tal como la palabra (en inglés) lo dice, este conector sirve para preguntar si el valor de la izquierda se encuentra contenido en la lista de valores de la derecha: campo IN (lista_de_valores) Si el valor de campo se encuentra a lo menos UNA vez, la comparación da Verdadero. En este sentido, tenemos dos formas de entregar la lista de valores a la consulta: a) Mediante una lista de valores constantes separados por coma. Ejemplos: ('r...

[tsql] SELECT CASE en TSQL

Sólo para que no se me olvide, ni a mí ni a los que lo necesiten :P : Hay 2 formas de usar el CASE en la sentencia: 1) Un campo o condición puede adquirir un solo valor por vez: SELECT CASE campo WHEN 1 THEN 'Es uno' WHEN 2 THEN 'Es dos' ELSE 'Cualquier otro' END AS valor ... 2) Varios campos o condiciones, pero sólo uno puede cumplirse: SELECT CASE WHEN campo1 = 1 THEN 'Es uno' WHEN campo1 > 1 AND campo1 < 2 THEN 'No es uno ni dos' WHEN campo1 IS NULL AND campo2 > 0 THEN 'Es nulo, pero el otro campo tiene valor' ELSE 'No sé' END AS valor ... Eso sería :)

[tsql] Formatos de Conversión de Fecha a Cadena en SQL Server

Holas! Hacía un tiempo había visto que en SQL Server se usa la función CONVERT() para formatear una fecha (y tal vez otros campos) a cadena. El formato para lograr esto en general es este: poniendo como ejemplo que quiero mostrar la fecha actual de la base de datos en la forma "aaaammdd" (año mes día, sin separaciones): > SELECT CONVERT(VARCHAR, GETDATE(), 112); Esto nos retornaría (en estos momentos) algo como esto: > 20101126 Analizando la función por partes, tenemos que: CONVERT() es, claro, la función. VARCHAR es el primer parámetro de la función e indica el tipo de datos en que queremos convertir el campo. GETDATE() es una función que retorna la fecha actual del servidor, pero para nuestros efectos acá ella está sólo ocupando el lugar de un campo tipo fecha, vale decir, este parámetro de la función es lo que queremos convertir. 112 es el formato en que queremos que el campo a convertir sea presentado; en este ejemplo, el código 112 convierte un cam...