none
Collation y separador de decimales RRS feed

  • Pregunta

  • ¿Como puedo saber, mediante el collation de la BD, que tipo de separador de decimales utiliza, es decir si usa punto(.) o coma(,).

    Saludos.



    • Editado Aivalo martes, 21 de agosto de 2012 7:57
    martes, 21 de agosto de 2012 7:25

Respuestas

  • Para obtener la collation_name de una tabla podria realizar un query mas o menos como este

    SELECT COLUMN_NAME,DATA_TYPE, COLLATION_NAME, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
    from information_schema.columns
    WHERE table_name = N'Product'
    --AND COLUMN_NAME = N'ProductID'
    --AND  (Data_Type LIKE '%char%' 
    --OR Data_Type LIKE '%text%') 
    --AND COLLATION_NAME <> @CollationName
    --ORDER BY ordinal_position 



    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    jueves, 23 de agosto de 2012 12:45
  • Eso no es algo que dependa de la intercalacion de la BD o del campo.. depende de la configuracion regional del equipo y lo puedes obtener asi:

    System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
                textBox1.Text = ci.NumberFormat.CurrencyDecimalSeparator;

    martes, 21 de agosto de 2012 11:33
  • Es lo que te estoy diciendo, no importa de que bd saques, ni que collation tiene cada una, es un tema de presentacion. Haz que tu aplicacion que obtiene los datos de cualquiera de tus bd, lo formatee como quieres que se vean..

    Te lo digo porque los collations no afectan a los tipos de datos money, decimal, float, int, numeric, etc. a no ser que estes haciendo mal guardando estos datos en tipos char, varchar, nvarchar, text, ntext?

    jueves, 23 de agosto de 2012 12:43

Todas las respuestas

  • Eso no es algo que dependa de la intercalacion de la BD o del campo.. depende de la configuracion regional del equipo y lo puedes obtener asi:

    System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
                textBox1.Text = ci.NumberFormat.CurrencyDecimalSeparator;

    martes, 21 de agosto de 2012 11:33
  • hola

    sera que estas trabjando en un stored procedure?

    ademas algo no entendi, porque el COLLATION no se usa para definir la cultura y tampoco veo porque debas usar un tipo de separador en concreto

    que es lo que buscas hacer?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 21 de agosto de 2012 12:03
  • Estoy intentando ejecutar una query desde Visual Studio por medio de un procedimiento almacenado en una BD de SQL Server. Está BD puede cambiar y tener un Collation completamente distinto de la que uso ahora mismo. Entonces me aparece el problema que al insertar numeros con miles o con decimales en la BD necesito saber si hace falta ponerselo  con "," o ".". 

    A mi el collation me lo pasan por medio de otro stored procedure.

    Espero que sea clara la explicación, en caso de no ser así preguntadme lo que sea.

    Gracias por vuestro tiempo.

    miércoles, 22 de agosto de 2012 11:58
  • En teoría la base de datos siempre usará el . es un estándar

    El Collation a nivel de BD solo influye sobre el juego de carácteres que utilizarán los campos que almacenen algún tipo de texto como char, varchar, blob o text etc.

    El asunto del punto es anterior a todo eso. tienes que manejarlo en la capa de validación de datos.

    te recomiendo parsear el dato introducido a número antes de mandarlo como parámetro a la base de datos.

    ADO ya se encargará de mandarlo con el punto.

    miércoles, 22 de agosto de 2012 15:59
  • Ahora mismo es lo que esto haciendo, pasar el dato ya parseado a la base de datos, pero quería saber a partir del COLLATION, que carácter se utiliza para poderlo reemplazar por el punto. Es decir que por ejemplo me llega de la BD del servidor que tenemos en Francia y se usa el separador de decimales la ",", pues tendría que hacer un replace del "." por la coma y ya pasarselo al INSERT con el formato indicado.

    En el enlace, si vais al apartado de Local, vienen las diferencias que se marcan. 

    http://technet.microsoft.com/es-es/library/ms143726(v=sql.90).aspx

    Con el COllation se puede sacar la configuración regional, podría a partir de ahí saber que separador se usa?.

    Saludos.


    • Editado Aivalo jueves, 23 de agosto de 2012 8:36
    jueves, 23 de agosto de 2012 7:12
  • Si eso es lo que estas haciendo, guardalo como venga que no es problema si alguien que tiene la coma y otro el punto como separador decimal, ya que si sumas 1,000.00 + 1.000,00 tendras 2000 finalmente. Lo que planteas solo lo tienes que preparar en la capa de presentacion, unificando que todos usen el mismo simbolo separador de miles y decimales..
    jueves, 23 de agosto de 2012 11:23
  • El problema que sigo viendo, es que no tengo solo una BD, sino bastantes. Y las tablas en las que inserto, no sólo las uso yo, así que los datos tienen que estar todos acordes, es decir todos con el separador de decimales y de miles igual, no puede haber unos con coma y otros con punto para poder separar. Yo cojo los datos de una BD y los inserto en otra, y sus collation pueden no tener nada que ver.


    jueves, 23 de agosto de 2012 12:27
  • Es lo que te estoy diciendo, no importa de que bd saques, ni que collation tiene cada una, es un tema de presentacion. Haz que tu aplicacion que obtiene los datos de cualquiera de tus bd, lo formatee como quieres que se vean..

    Te lo digo porque los collations no afectan a los tipos de datos money, decimal, float, int, numeric, etc. a no ser que estes haciendo mal guardando estos datos en tipos char, varchar, nvarchar, text, ntext?

    jueves, 23 de agosto de 2012 12:43
  • Para obtener la collation_name de una tabla podria realizar un query mas o menos como este

    SELECT COLUMN_NAME,DATA_TYPE, COLLATION_NAME, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
    from information_schema.columns
    WHERE table_name = N'Product'
    --AND COLUMN_NAME = N'ProductID'
    --AND  (Data_Type LIKE '%char%' 
    --OR Data_Type LIKE '%text%') 
    --AND COLLATION_NAME <> @CollationName
    --ORDER BY ordinal_position 



    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    jueves, 23 de agosto de 2012 12:45
  • Excelente la query que te pasa Angel, demuestra lo que te estoy diciendo. Ejecutalo con el nombre de tu tabla en cuestion y veras que a los tipos de datos numericos y moneda no les afecta el collation, fijate que en la columna COLLATION_NAME te devolverá NULL.
    jueves, 23 de agosto de 2012 12:53