Archive

Archive for janvier 2012

[Sybase] Des fonctions qui manquent…

Aujourd’hui, j’ai eu deux problèmes avec Sybase.  J’aurais eu besoin de fonctions existantes chez Oracle. VDM.

Oups, pardon, c’est pas ça…

Bref, vous l’aurez compris, je travaille sur ASE, actuellement, et j’aurais bien aimé trouver certaines fonctions utiles.
Pour obtenir la version de ASE :

select @@version

Chez moi, ça retourne :

Adaptive Server Enterprise/15.0.3/EBF 16736 ESD#2/P/Sun_svr4/OS 5.8/ase1503/2707/64-bit/FBO/Sun Jul 26 10:29:50 2009

La première chose que je devais faire…vérifier un input utilisateur.
En fait, l’utilisateur importe des données via un CSV, mais en travaillant (mal) avec Excel, un identifiant du type 0000123 se retrouve tronquer en 123. Donc, il faut ajouter les 0 qui vont bien pour avoir 7 caractères.
Sur Oracle, j’aurais utilisé LPAD. Sur ASE…y a pas.
Du coup, j’en arrive à avoir ceci :


SELECT @Var = replicate('0', 7 - char_length(@Var)) || @Var

C’est quand même nettement moins intuitif…

La deuxième chose, c’est une conversion de date.
Dans le même import, j’ai une date au format YYYYMMDD (20120124 pour aujourd’hui) que je dois intégrer dans un champ DATE, au format 24/01/2012.
En Oracle, j’aurais joué avec le TO_DATE. Sur ASE…y a pas.
Du coup, j’en arrive à avoir ceci :

SELECT CONVERT(VARCHAR,CONVERT(DATETIME,'20120124'),103)

C’est quand même nettement moins intuitif…

Bon, après, chacun ses préférences, son passif pour chacune des SGBDR… Y a sans aucun doute de gros avantages à avoir un ASE plutôt qu’un Oracle. Mais perso…pas encore vu…dommage ^^

MAJ 31/01/2012
Un autre truc un peu embêtant dans ASE : il est interdit d’utiliser la fonction getdate() dans une fonction (pourquoi ???)
Bref, un truc pas forcément élégant mais efficace, comme solution de contournement : une vue…

CREATE VIEW vu_currentdate
AS
SELECT getdate() AS current_date

PS : je mettrais ce billet à jour  au cas où je trouve d’autres choses ! 🙂

Catégories :ASE, SGBDR

[C#] Formatage des nombres et culture

Depuis quelques temps, je suis sur un projet en phase de recette (depuis mi-octobre, en fait…c’est pas un très gros projet, mais il a été mal spécifié et donc on a plein de choses à refaire…). Et dans les anomalies qui nous étaient retournées, on a eu assez souvent des trucs du type : « changer le format de la date », « ajouter les décimales au montant » avec des variantes du style « le montant doit être sur deux décimales », « mettre trois chiffres après la virgule sur les montants »…

Du coup, j’en ai eu un peu marre de passer sur les différents usercontrol pour modifier encore et encore. J’ai donc remonter qu’il n’y aurait que deux formats de nombre (avec ou sans décimales) et plusieurs formats de date (datetime, date longue, date courte, temps long, temps court). Et je me suis fais une série de classe pour tout gérer.

Mais le format qu’ils m’ont donnés ne correspondait pas au format français : 100.000,000 (au lieu de 100 000,00 en français) et d’autres petites choses du style.
J’ai donc modifié un peu ma classe pour prendre en compte les cultures (de base) et surtout les cultures un peu custom.

En utilisation, ça donne, dans mon Global.asax.cs :

            #region Number Format
            NumberFormatInfo numberFormatInfo = new NumberFormatInfo();
            numberFormatInfo.CurrencyDecimalDigits = 2;
            numberFormatInfo.CurrencyDecimalSeparator = ",";
            numberFormatInfo.CurrencyGroupSeparator = ".";
            numberFormatInfo.CurrencySymbol = "€";
            numberFormatInfo.CurrencyNegativePattern = 5;
            numberFormatInfo.CurrencyPositivePattern = 3;
            numberFormatInfo.NumberDecimalDigits = 3;
            numberFormatInfo.NumberDecimalSeparator = ",";
            numberFormatInfo.NumberGroupSeparator = ".";
            numberFormatInfo.PercentDecimalDigits = 2;
            numberFormatInfo.PercentDecimalSeparator = ",";
            numberFormatInfo.PercentGroupSeparator = ".";
            #endregion

            #region Date Format
            DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo();
            dateTimeFormatInfo.FullDateTimePattern = "dddd d MMMM yyyy, HH:mm:ss";
            dateTimeFormatInfo.LongDatePattern = "dddd dd MMMM yyyy";
            dateTimeFormatInfo.LongTimePattern = "HH:mm:ss";
            dateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy";
            dateTimeFormatInfo.ShortTimePattern = "HH:mm";
            #endregion

            CultureInfo custom = new CultureInfo("fr-fr");
            custom.NumberFormat = numberFormatInfo;
            custom.DateTimeFormat = dateTimeFormatInfo;

            CultureInfoCollection collection = new CultureInfoCollection()
            {
                { "Custom", custom }
            };

            Format.Initialize(String.Empty,
                System.Threading.Thread.CurrentThread.CurrentCulture,
                collection);

Et en utilisation :

Format.Numeric.NumberFormatDecimals(d, "Custom");
//Culture custom : 5.214.564,146
Format.Numeric.NumberFormatDecimals(d)
//Culture par défaut, ici fr-FR (CurrentCulture, définie dans Format.Initialize) : 5 214 564,15
Format.Date.FullDateTime(date);
// Culture par défaut : dimanche 1 janvier 2012 10:00:01
Format.Date.FullDateTime(date, "en-us");
// Culture en-us, ajoutée à la volée dans les cultures gérées : Sunday, January 01, 2012 10:00:01 AM
Format.Date.FullDateTime(date, "Current");
// Culture courante : System.Threading.Thread.CurrentThread.CurrentCulture

La classe peut être trouvée sur Pastbin ! (je sais, j’ai tout mit en vrac, mais bon ^^)

Catégories :.Net, C#

Bilan 2011

Bon, on est le 17 janvier, mais quand même…

Déjà, bonne année à tous ! J’espère que cette année sera meilleure que la précédente (au pire, c’est mieux, au mieux, c’est encore mieux ^^).

Je voulais aussi faire un petit point sur ce blog. Le bilan d’une année, pour le moment.
En terme de chiffre, ça donne 40 articles dont 34 publiés (ouais, j’ai des brouillons, faudra que j’y pense, un jour…).
Ça  donne aussi 1.600 pages vues, avec le plus gros jour le 11 octobre (34 vues) et 220 vues en août.

Pour le top 5 des billets :

  1. [C# 4 SSIS] Exécuter un package SSIS, 248 vues
  2. [C#] Les Web Services, 158 vues
  3. [C#] WebService – REST, 118 vues
  4. [C# 4 MVC2 JQuery] Appeler une action depuis JQuery – Part 2, 91 vues
  5. [C# 4 MVC2 JQuery] Appeler une action depuis JQuery, 73 vues

Le package SSIS domine donc largement et si ce billet a pu aider un peu des gens (sur les 248 vues, j’ai espoir pour au moins une personne  ^^), ça me va.

Mais aussi, un peu un échec pour les derniers mois.
J’ai complètement lâché le « Feed of the Week » et je n’ai pas réellement posté de façon régulière.

Donc, pour 2012…
Objectif chiffré et atteignable : 40 billets, avec au moins 1 par mois (celui-ci ne comptant pas pour janvier ! ^^).
Regardé un peu plus ce qui se passe sur la communauté (pas forcément intervenir, ceci dit) et être plus présent sur Stackoverflow.

Voilà, sur ce, encre une fois : bonne année et see you soon !

Catégories :Divers