Newsgroup: it.comp.programmare
Titolo: Query SQL: problema con le date

    In una applicazione che sto scrivendo con C# e .Net ho necessita di
eseguire una query su un database Access che mi restituisca un insieme di
record da una tabella che contiene una campo data che sia compresa in un
certo intervallo. Io ho provato una cosa del genere:
SELECT * FROM Contratti WHERE Data>#1/1/2005# AND Data<#1/7/2005
ma mi vengono fuori anche record che non rispettano quella condizioni. Dalla
guida di access non si capisce granchè, soprattutto se è possibile fare ciò
che voglio.
C'è qualcuno che potrebbe aiutarmi?
Grazie in anticipo
--
----------------------------
Fulvio Esposito
"La differenza tra teoria e pratica e',
in pratica, un po' piu' che in teoria"
----------------------------

 C'è qualcuno che potrebbe aiutarmi?
che record ti tira fuori? probabilmente ti estrae pochi record vero? 
Questo perché la seconda data Access la interpreta come 7 Gennaio e non 
come 1° Luglio. Non solo, i segni > e < che hai usato hanno escluso gli 
estremi. Verifica se questo soddisfa i tuoi criteri.
M.

 estremi. Verifica se questo soddisfa i tuoi criteri.
Ti ringrazio, era proprio questo il problema! Ho incluso gli estremi e
utilizzato il metodo ToString( "MM/dd/yyyy" ) per ottenere una data
all'americana. Adesso tutto funziona a dovere.
Però adesso ho un altro problema:
Dato un numero come ne ottengo la rappresentazione in lettere (es. 500 ->
CINQUECENTO ). Avevo pensato di fare un loop sulla rappresentazione stringa
e a seconda della posizione aggiungere i suffissi giusti stando attento ai
casi a due cifre come dieci, undici etc. che vanno trattati a parte! Secondo
voi è una buona idea o si può fare di meglio?
Grazie ancora!


 
quà c'è una ottima esposizione del problema e una delle possibili 
soluzioni: 
http://www.itportal.it/office/word/cifre_Word/
l'ho trovato con google cercando 'convertire numero' ;)
M.

 l'ho trovato con google cercando 'convertire numero' ;)
Ho letto l'articolo e risolto (almeno in parte, la mia implementazione
funziona fino a 999 999 999 999) ma per le mie esigenze va più che bene.
Sotto posto la mia soluzione, spero si capisca! Grazie ancora
/*
 * Created by SharpDevelop.
 * User: Fulvio
 * Date: 08/04/2005
 * Time: 23.32
 *
 */
using System;
namespace Mediazioni
{
 public class NumberWordConverter
 {
  public static string Convert( int number )
  {
   string stringRep = number.ToString();
   int i = stringRep.Length;
   System.Text.StringBuilder b = new System.Text.StringBuilder();
   if( (i % 3) == 2 )
    stringRep = "  " + stringRep;
   else if( (i % 3) == 1 )
    stringRep = " " + stringRep;
   i = 0;
   int count = 0;
   if( stringRep.Length - i > 8 )
    count = 0;
   else if( stringRep.Length - i > 6 )
    count = 1;
   else
    count = 2;
   while( i < (stringRep.Length - 4) )
   {
    string three = stringRep.Substring( i, 3 );
    string rep1 = ConvertGroupOfThree( three );
    if( rep1 == "UNO" )
    {
     b.Append( usuff[count] );
    }
    else if( rep1 != "" )
    {
     b.Append( rep1 );
     b.Append( suff[count] );
    }
    i += 3;
    count++;
   }
   string rep = stringRep.Substring( i, 3 );
   b.Append( ConvertGroupOfThree( rep ) );
   return b.ToString();
  }
  private static string ConvertGroupOfThree( string ThreeChars )
  {
   System.Text.StringBuilder b = new System.Text.StringBuilder();
   if( ( ThreeChars.Length == 3 ) && ( ThreeChars[0] != ' ' ) && (
ThreeChars[0] != '0' ) )
   {
    int index = Int32.Parse( ThreeChars[0].ToString() );
    if( ThreeChars[0] != '1' )
     b.Append( corrUnit[ index ] );
    b.Append( "CENTO" );
   }
   if( ( ThreeChars.Length >= 2 ) && ( ThreeChars[1] != ' ' ) && (
ThreeChars[1] != '0' ) )
   {
    int number = Int32.Parse( ThreeChars.Substring( 1, 2 ) );
    if( number < 20 )
    {
     b.Append( corrUnit[ number ] );
     return b.ToString();
    }
    else
    {
     int dec = Int32.Parse( ThreeChars[1].ToString() );
     b.Append( corrDec[ dec - 2 ] );
     if( ThreeChars[2] == '1' )
      b.Remove( b.Length - 1, 1 );
    }
   }
   if( ( ThreeChars.Length >= 1 ) && (ThreeChars[2] != ' ' ) &&
(ThreeChars[2] != '0' ) )
   {
    int number = Int32.Parse( ThreeChars[2].ToString() );
    b.Append( corrUnit[ number ] );
   }
   return b.ToString();
  }
  private static string[] corrUnit = new string[]{
   "ZERO",
   "UNO",
   "DUE",
   "TRE",
   "QUATTRO",
   "CINQUE",
   "SEI",
   "SETTE",
   "OTTO",
   "NOVE",
   "DIECI",
   "UNDICI",
   "DODICI",
   "TREDICI",
   "QUATTORDICI",
   "QUINDICI",
   "SEDICI",
   "DICIASSETTE",
   "DICIOTTO",
   "DICIANNOVE"
  };
  private static string[] corrDec = new string[]{
   "VENTI",
   "TRENTA",
   "QUARANTA",
   "CINQUANTA",
   "SESSANTA",
   "SETTANTA",
   "OTTANTA",
   "NOVANTA"
  };
  private static string[] suff = new string[] {
   "MILIARDI",
   "MILIONI",
   "MILA"
  };
  private static string[] usuff = new string[] {
   "UNMILIARDO",
   "UNMILIONE",
   "MILLE"
  };
 }
}