2012-06-15 12 views
5

So che esiste una funzione chiamata isdate() per convalidare le colonne datetime, ma funziona solo per i tipi smalldatetime e datetime. La domanda è: esiste un modo simile per convalidare il nuovo tipo di dati datetime2 in sql server 2008 e 2012?Esiste una funzione come isdate() per datetime2?

+3

strettamente parlando ISDATE() non convalida colonne datetime; esso convalida se un'espressione può essere analizzata come un datetime. Dopo che è in una colonna è un po 'tardi! –

+1

@MitchWheat è un buon punto. Sembra più probabile convalidare (a) date memorizzate in modo errato in una colonna varchar o (b) parametri di input che sono di un tipo di dati errato. –

+0

Desidero convalidare l'input da un foglio Excel con alcune colonne di data in una tabella temporanea. – Vladimir

risposta

12

In SQL Server 2012, è possibile utilizzare TRY_CONVERT:

SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'), 
     TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623'); 

Risultati:

2012-02-02 13:42:55.2323623 NULL 

O TRY_PARSE: (. Gli stessi risultati)

SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2), 
     TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2); 

dispiace che io non ho una risposta intelligente per voi per < 2012. Si potrebbe, immagino, dire

SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23); 

Ma che si sente sporca.

TRY_CONVERT documentation on MSDN
TRY_PARSE documentation on MSDN

+0

nice one ................ –

+0

Risposta intelligente! Mi è piaciuto molto! Un'altra domanda sul datetime2 in SQL Server 2008, c'è un modo per verificare la data valida quando il valore è qualcosa come prima di "1 gennaio 1753"? Usando questo comando verrebbe data non valida SELECT ISDATE (SINISTRA ('2012-02-02 13: 42: 55.2323623', 23)); – Vladimir

+0

@ Vladimir scusa ho appena notato la tua domanda ora. È accademico o hai davvero date <1753? –

Problemi correlati