Избягвайте грешки при опит за преобразуване в datetime

Има ли начин в SQL да се игнорират записи, за които преобразуването е неуспешно. Задаването на някаква стойност по подразбиране също ще работи.

> SELECT convert(datetime, foo_str)
> FROM foo_tbl

 ------------------------
 Aug 23 2013 00:00:00.000
 Aug 17 2013 00:00:00.000
 May 06 2015 00:00:00.000
 Aug 13 2013 00:00:00.000
 Aug 09 2013 00:00:00.000
 Sep 05 2007 00:00:00.000
 May 06 2015 00:00:00.000
 May 06 2015 00:00:00.000
 Feb 24 2009 00:00:00.000
 May 06 2015 00:00:00.000
 Mar 29 2013 00:00:00.000
 May 06 2015 00:00:00.000
 Jul 24 2010 00:00:00.000
 May 06 2015 00:00:00.000
 May 06 2015 00:00:00.000
 May 03 2015 00:00:00.000

Msg 249, ниво 16, състояние 1, ред 1 Синтактична грешка по време на изрично преобразуване на VARCHAR стойност '10101' в поле DATETIME.

Може ли грешката да бъде избегната, така че изразите SELECT да бъдат завършени?


person Community    schedule 14.05.2015    source източник


Отговори (1)


Нещо като кода по-долу трябва да работи на sybase

SELECT convert(datetime, foo_str)
FROM foo_tbl
WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'

ако 00:00:00.000 е константа, можете да го направите по-просто

SELECT convert(datetime, foo_str)
FROM foo_tbl
WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9] 00:00:00.000'

or

SELECT convert(datetime, foo_str)
FROM foo_tbl
WHERE foo_str like '[A-Z][A-Z][A-Z] [0-1][0-9] [0-2][0-9][0-9][0-9]%'
person Robert    schedule 14.05.2015
comment
брилянтно, датите ми са във формат ГГГГММДД, така че адаптирах низа за харесване към това, но много благодаря - person ; 14.05.2015
comment
@isonix Радвам се, че мога да помогна :) - person Robert; 14.05.2015
comment
Имайте предвид, че регулярният израз, използван тук, проверява само дали стойността изглежда като datetime, но не и ако кряка като такава. Например, ако името на месеца не е валидно, пак ще получите грешката. - person B0Andrew; 14.05.2015