2012-10-17 12 views
5

Ho un database in SQL Server. Non ho l'autorizzazione per cambiare tabella ma posso creare visualizzazioni.Come convertire varchar in datetime e saltare datetime non valido in TSQL

Ho tre colonne varchar che memorizzano le date nel formato YYYYMMDD. Voglio creare una vista in cui le date vengono convertite da varchar a datetime.

Ora può accadere che al posto di una data in queste colonne possa avere spazio vuoto, NULL o il carattere -.

Prendiamo la colonna closedDate. Se uso CONVERT(datetime, closedDate, 112)

  1. date valide vengono convertiti correttamente,

  2. Quando v'è spazio vuoto la data viene convertita in 1900-01-01,

  3. NULL viene mantenuto,

  4. Il - causa un errore di conversione:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Come posso dire alla funzione di convertire le date solo se ha un modulo di data valido e lasciare NULL o meglio una data vuota (o spazio) in tutti gli altri casi?

risposta

15

Prova questa

CASE WHEN ISDATE(closedDate) = 1 THEN CONVERT(datetime, closedDate, 112) 
    ELSE NULL END closedDate 
+0

Perfetto, grazie! E se invece di NULL voglio ottenere la data/lo spazio vuoto? – CiccioMiami

+0

Non è possibile avere uno spazio vuoto in un campo datetime. – HLGEM

+0

Grazie funziona come un fascino! –

0
 Use below code  


    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
         ELSE null END 
      FROM tablename 


use below for empty data 

    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
          ELSE '' END 
       FROM tablename 
+0

Il secondo esempio non funzionerà come previsto. SQL (TSQL PL/SQL) deve scegliere un tipo di dati per l'output di riga e, poiché la colonna sembra essere datetime, tutti i valori devono essere convertiti in data/ora. E una stringa vuota "convertita in data/ora restituisce" 1900-01-01 00:00:00 "su SQL Server (e scommetto lo stesso su Oracle). – ripvlan

+0

sì, restituirà la data predefinita 1900-01-01 00: 00: 00.000 – Shridhar

Problemi correlati