none
dar formato miles y 2 decimales a un campo numerico RRS feed

  • Pregunta

  • Hola amigos,

    tengo mi BD SQL 2008 R2 tengo mi tabla pagos que tiene el campo Importe de tipo double, quisiera que al realizar la consulta se muestre con separacion es miles, y dos decimales. asimismo si el valor llega a millones que tambien lo separe:

    500.33

    1,500.33 

    2,331,500.33

    como realizo dicho formato?

    lunes, 29 de agosto de 2016 20:21

Respuestas

  • MateoDeveloper,


    Como recomendación, no es correcto dar formato a un valor numérico desde una consulta de selección porque el valor llega al cliente convertido en un tipo cadena, nota que tanto la función CONVERT() como FORMAT() retornan un valor -formateado- de tipo varchar().

    Lo que te aconsejo es que la consulta de selección recupere y envíe el valor conservando el tipo numérico (por cierto, quizá debas elegir el tipo decimal (p, s) frente al tipo double) y en la UI (interfaz de la aplicación) te encargues de aplicar el formato que consideres oportuno:

    //En caso recuperes un valor escalar
    double Importe = 2331500.33;
    string valorFormateado = Importe.ToString("#,##0.00");
    
    //Resultado: 2,331,500.33
    
    
    //En caso cargues una columna de un contenedor de datos con dicho valor:
    dataGridView1.DataSource = dt; //dt: Objeto de tipo DataTable
    dataGridView1.Columns["Importe"].DefaultCellStyle.Format = "#,##0.00";
                
    //Resultado: 2,331,500.33


    La forma que muestro -de aplicar formato a un valor numérico- es una de varias, considera que el caracter mostrado como separador decimal y/o separador de unidades varía según la configuración regional establecida en el equipo cliente, sin embargo puedes establecer una configuración fija en base a una cultura especifica.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 30 de agosto de 2016 2:34

Todas las respuestas

  • Si usas SQL Server 2008 podrías tratar así:

    SELECT CONVERT(VARCHAR, CAST(2331500.33 AS MONEY), 1)

    De usar una versión superior prueba FORMAT.

    Saludos,


    Ayacucho - Perú
    Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.

    http://litigiouslobo.blogspot.com/
    El Blog de Steve Morrison

    lunes, 29 de agosto de 2016 20:33
  • Saludos

    SELECT CONVERT(NVARCHAR(30), CAST(111111111 AS MONEY), 1) 
    
    SELECT FORMAT(11111111, '#,###.00')

    Cualquiera opción debe de funcionar.

    lunes, 29 de agosto de 2016 20:44
  • MateoDeveloper,


    Como recomendación, no es correcto dar formato a un valor numérico desde una consulta de selección porque el valor llega al cliente convertido en un tipo cadena, nota que tanto la función CONVERT() como FORMAT() retornan un valor -formateado- de tipo varchar().

    Lo que te aconsejo es que la consulta de selección recupere y envíe el valor conservando el tipo numérico (por cierto, quizá debas elegir el tipo decimal (p, s) frente al tipo double) y en la UI (interfaz de la aplicación) te encargues de aplicar el formato que consideres oportuno:

    //En caso recuperes un valor escalar
    double Importe = 2331500.33;
    string valorFormateado = Importe.ToString("#,##0.00");
    
    //Resultado: 2,331,500.33
    
    
    //En caso cargues una columna de un contenedor de datos con dicho valor:
    dataGridView1.DataSource = dt; //dt: Objeto de tipo DataTable
    dataGridView1.Columns["Importe"].DefaultCellStyle.Format = "#,##0.00";
                
    //Resultado: 2,331,500.33


    La forma que muestro -de aplicar formato a un valor numérico- es una de varias, considera que el caracter mostrado como separador decimal y/o separador de unidades varía según la configuración regional establecida en el equipo cliente, sin embargo puedes establecer una configuración fija en base a una cultura especifica.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 30 de agosto de 2016 2:34