Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (2023)

Desarrollo

>

ASP.NET

  • Pregunta

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (1)

    Inicie sesión para votar

    Hola buen dia, tengo un problema en una consulta que uso con UNION, al parecer es porque los tipos de datos no son iguales

    "ID_M" es NUMBER y "CLAVE" es VARCHAR2

    Esta es mi consulta

    Select 'tabla1' TABLA, CLAVE, 'ID_M' Campo,'ID_M' Consulta, ID_M as Valor,count(1) cnt from tabla1 where ID_M is null or ID_M=0 group by CLAVE, ID_MUNIONSelect 'tabla1' TABLA, CLAVE, 'CLAVE' Campo,'CLAVE' Consulta, CLAVE as Valor,count(1) cnt from tabla1 where CLAVE is null group by CLAVE, CLAVE;

    y me arroja este error:

    ""ORA-01790: la expresión debe tener el mismo tipo de dato que la expresión correspondiente""
    ""01790. 00000 - "expression must have same datatype as corresponding expression"""
    ""*Cause: ""
    ""*Action: ""

    Trate de convertir el campo de tipo Number a Varchar con ejemplos que encontre que utilizar la funcion TO_CHAR, pero lo convierte

    Select TO_CHAR ('tabla1' TABLA, CLAVE, 'ID_M' Campo,'ID_M' Consulta, ID_M as Valor,count(1) cnt) from tabla1 where ID_M is null or ID_M=0 group by CLAVE, ID_MUNIONSelect 'tabla1' TABLA, CLAVE, 'CLAVE' Campo,'CLAVE' Consulta, CLAVE as Valor,count(1) cnt from tabla1 where CLAVE is null group by CLAVE, CLAVE;

    He hecho mas consultas con mismo tipo de dato y si funciona corractamente, el problema es cuando hay datos con diferente tipo de datos

    Alguien me podria guiar en que esta mal mi consulta por favor


    • Editado Jaime Ortega E_ viernes, 10 de mayo de 2019 15:41 ERROR EN LINEA DE CODIGO

    viernes, 10 de mayo de 2019 15:39

    Responder

    |

    Citar

Respuestas

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (3)

    1

    Inicie sesión para votar

    (Video) Tutorial#45 TO_NUMBER function | Convert varchar value into number format

    Adicional

    Intenta formar la consulta con un formato concreto, normalmente se usa el estándar ANSI 92, te hará evitar errores.

    Select 'tabla' AS Tabla

    los alias de tabla con AS, pero sobre todo que significa dos veces clave en el group by del segundo conjunto.

    Es posible, que no este correctamente formado.

    ¿Qué es ID_M? Si es una columna, supongo que cuando se refiere al alias Consulta, no debiera de ir con apóstrofes.

    Además tienes un paréntesis de más. Voy a suponer que es una columna al igual que Clave.

    Suponiendo que id_m y clave fueran de tipos diferentes, te los doy todos como varchar2(100), y si no te hace falta le quitas el cast.

    SELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_M AS varchar2(100)) AS Campo, cast(ID_M AS varchar2(100)) AS Consulta, cast(ID_M AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE ID_M IS NULL OR ID_M = 0GROUP BY CLAVE , ID_M , cveoperUNIONSELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CLAVE AS varchar2(100)) AS Campo, cast(CLAVE AS varchar2(100)) AS Consulta, cast(CLAVE AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE CLAVE IS NULLGROUP BY CLAVE , cveoper;

    Esta puede ser una aproximación a tu consulta.

    • Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
    • Marcado como respuesta Jaime Ortega E_ viernes, 10 de mayo de 2019 18:18

    viernes, 10 de mayo de 2019 16:01

    Responder

    |

    Citar

Todas las respuestas

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (5)

    1

    Inicie sesión para votar

    Hola Jaime Ortega E_

    Tu consulta, quizá no debiera de ser en el foro de ASP.NET, ya que por el error te lo esta devolviendo una base de datos deORACLE, por tanto quizá el sitio más apropiado fuera o uno de los múltiples foros de Oracle, o elforo de ADO.NET

    En cuanto a la consulta, prueba a realizarla, con CAST

    Select 'tabla1', cast(cveoper as varchar(100)),.....

    unión

    Select 'tabla1', cast (cveoper as varchar(100)),....

    Cada una de las columnas de cada uno de los conjuntos, debe de ser del mismo tipo. No la fila entera, sino , cada una de las columnas.

    Puedes hacer un Select 1 unión Select 1, o Select cast(1 as varchar(10)) unión all Select '1' ya que las columnas son del mismo tipo.

    OPERADOR CAST ORACLE

    https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions016.htm

    • Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
    (Video) SQL Convert Function - SQL Training Online - Quick Tips Ep7

    viernes, 10 de mayo de 2019 15:49

    Responder

    |

    Citar

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (7)

    1

    Inicie sesión para votar

    Adicional

    Intenta formar la consulta con un formato concreto, normalmente se usa el estándar ANSI 92, te hará evitar errores.

    Select 'tabla' AS Tabla

    los alias de tabla con AS, pero sobre todo que significa dos veces clave en el group by del segundo conjunto.

    Es posible, que no este correctamente formado.

    ¿Qué es ID_M? Si es una columna, supongo que cuando se refiere al alias Consulta, no debiera de ir con apóstrofes.

    Además tienes un paréntesis de más. Voy a suponer que es una columna al igual que Clave.

    Suponiendo que id_m y clave fueran de tipos diferentes, te los doy todos como varchar2(100), y si no te hace falta le quitas el cast.

    SELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_M AS varchar2(100)) AS Campo, cast(ID_M AS varchar2(100)) AS Consulta, cast(ID_M AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE ID_M IS NULL OR ID_M = 0GROUP BY CLAVE , ID_M , cveoperUNIONSELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CLAVE AS varchar2(100)) AS Campo, cast(CLAVE AS varchar2(100)) AS Consulta, cast(CLAVE AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE CLAVE IS NULLGROUP BY CLAVE , cveoper;

    Esta puede ser una aproximación a tu consulta.

    • Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
    • Marcado como respuesta Jaime Ortega E_ viernes, 10 de mayo de 2019 18:18

    viernes, 10 de mayo de 2019 16:01

    Responder

    |

    Citar

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (9)

    (Video) Operadores SET en SQL

    Inicie sesión para votar

    HolaJaime Ortega E_,

    Si de hecho el problema de tu consulta es que no sabes cómo realizar una union podria venirte bien darle una revisada a los tutos enhttps://www.w3schools.com/ ahora te comento que en Microsoft no se hace una clarificación de los conceptos mal aplicados.

    Y te comento que dicha consulta tambien la puedes realizar enhttps://stackoverflow.com/ lo cuál te recomiendo ampliamente.

    Por otro lado

    El error como se indica reside en querer hacer un "cast" a CHAR.

    No dudes en ampliar más sobre este tema si es que aún lo requirieras o de abrir una nueva consulta en caso de tener alguna situación o necesitarla con algún otro de los productos de Microsoft.
    Adicional le invito a consultar los siguientes recursos:
    Guía para formular preguntas en el foro
    Channel 9- donde puedes encontrar una sección de: SQL Server

    Gracias por usar los foros de TechNet.
    Erick Rivera
    ____
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    viernes, 10 de mayo de 2019 17:43

    Responder

    |

    Citar

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (11)

    Inicie sesión para votar

    Select 'SEG_LEV_PLAN' TABLA, cveoper, 'SEG' Campo,'SEG' Consulta, SEG as Valor,count(1) cnt from seg_lev_planwhere seg not in ('N','A','B','C','D','E','F','G','H','I','S') group by cveoper, SEGUNIONSelect 'SEG_LEV_PLAN' TABLA, cveoper, 'cveoper' Campo,'cveoper' Consulta, cveoper as Valor,count(1) cnt from seg_lev_plan where CVEOPER BETWEEN 0 AND 021111110 OR CVEOPER BETWEEN 331111123 AND 999999999 group by cveoper

    Este es un ejemplo de una consulta que si me arroja resultados ya que ambos campos de la tabla son de tipo VARCHAR, les pongo alias porque se ocupan ciertas columnas con esos datos, me da de resultado esto:

    TABLACVEOPERCAMPOVALORCONSULTACOUNT
    PLAN12121212SEGSEGx1
    PLAN12121212cveopercveoper121212121
    PLAN361111111SEGSEGQ1
    PLAN361111111cveopercveoper3611111111

    En campo y valor me trae el nombre de la columna y en consulta el dato que tiene dentro, pero con la otra consulta me arroja el error por el tipo de dato, la acomode asi:

    SELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_MZA AS varchar2(100)) AS Campo, cast(ID_MZA AS varchar2(100)) AS Consulta, cast(ID_MZA AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE ID_MZA IS NULL OR ID_MZA = 0GROUP BY cveoper, ID_MZAUNIONSELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CVEGEO AS varchar2(100)) AS Campo, cast(CVEGEO AS varchar2(100)) AS Consulta, cast(CVEGEO AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE cveoper IS NULLGROUP BY cveoper, CVEGEO;

    pero me trae en valores 0

    TABLACVEOPERCAMPOVALORCONSULTACOUNT
    SEG_LEV_INM211111100001
    SEG_LEV_INM211111230001

    Me ayudarias explicandome porque?

    Y muchas gracias por el apoyo

    viernes, 10 de mayo de 2019 18:08

    Responder

    |

    Citar

    (Video) Oracle CAST Function
  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (13)

    Inicie sesión para votar

    Muchas gracias ya vi donde estaba mi error, usaba el cast cuando no era necesario, me ayudo mucho tu apoyo :)

    al final asi quedo mi consulta

    SELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, 'ID_MZA' Campo, 'ID_MZA' Consulta, cast(ID_MZA AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE ID_MZA IS NULL OR ID_MZA = 0GROUP BY cveoper, ID_MZAUNIONSELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, 'CVEGEO' Campo, 'CVEGEO' Consulta, cast(CVEGEO AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE CVEGEO IS NULLGROUP BY cveoper, CVEGEO;

    Te lo agradesco, excelente dia

    viernes, 10 de mayo de 2019 18:19

    Responder

    |

    Citar

  • Covertir Tipo numero a Varchar2 en consulta con union TO_CHAR (15)

    1

    Inicie sesión para votar

    De nada

    viernes, 10 de mayo de 2019 18:26

    Responder

    |

    Citar

    (Video) Oracle SQL Numeric Data Types | Oracle SQL fundamentals

Videos

1. Curso de Oracle SQL en español desde cero | JOINS mas de dos tablas, video(43)
(INFORMATICONFIG)
2. Cast And Convert Functions In SQL | CAST() And CONVERT() In SQL | SQL For Beginners | SimpliCode
(SimpliCode)
3. Curso de Oracle SQL en español desde cero | GROUP BY en Oracle SQL video(30)
(INFORMATICONFIG)
4. Three or More Sets At Once (Introduction to Oracle SQL)
(Database Star)
5. ORACLE: Fecha y Hora (Date)
(Miguel Lopez)
6. Curso de Oracle SQL en español desde cero | relaciones entre tablas, CROSS JOINS, video(42)
(INFORMATICONFIG)

References

Top Articles
Latest Posts
Article information

Author: Golda Nolan II

Last Updated: 07/11/2023

Views: 5670

Rating: 4.8 / 5 (78 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Golda Nolan II

Birthday: 1998-05-14

Address: Suite 369 9754 Roberts Pines, West Benitaburgh, NM 69180-7958

Phone: +522993866487

Job: Sales Executive

Hobby: Worldbuilding, Shopping, Quilting, Cooking, Homebrewing, Leather crafting, Pet

Introduction: My name is Golda Nolan II, I am a thoughtful, clever, cute, jolly, brave, powerful, splendid person who loves writing and wants to share my knowledge and understanding with you.