Come ignorare i personaggi cattivi in una query SQL
-
18-09-2019 - |
Domanda
Il racconto è che ho un DB server SQL con campi varchar invece di datetime (non chiedere, è una lunga storia e non può essere risolto). In qualche modo abbiamo recentemente stati sempre caratteri casuali / strani inseriti in questi campi, invece di quello che dovrebbe essere lì (o NULL, '' o AAAA-MM-DD). Qualcosa di simile a questo: '? + X'. Con caratteri ASCII high-bit
Il rapporto utilizza questa query per aiutare massaggiare i dati in qualcosa di utilizzabile (solo parti rilevanti pubblicati qui):
SELECT CASE WHEN c.CallStatus = 'Closed' THEN CAST(c.ClosedDate + ' ' + c.ClosedTime as datetime) ELSE NULL END as 'Closed Date'
WHERE CAST(c.closeddate AS DATETIME) BETWEEN @StartDate AND @EndDate
, ma sta soffocando su questa nuova dati male.
La mia domanda è questa:
Come posso aggiornare la query per ignorare i dati non corretti in modo da poter ottenere i rapporti per l'esecuzione, mentre io caccia giù la fonte dei dati non validi? La mia prima priorità è di ottenere i report in funzione, secondo è quello di trovare e uccidere la fonte dei dati errati.
Soluzione
CASE WHEN ISDATE(closeddate) = 1 THEN CAST(c.closeddate AS DATETIME) ELSE NULL END
Altri suggerimenti
sembra essere tutti i fissi, thankyouverymuch! ecco il mio risultato finale:
E caso in cui ISDATE (closeddate) = 1 Poi gettato (c.closeddate AS DATETIME) END ELSE NULL TRA @StartDate E @EndDate
e ora in poi per la caccia!