2011-01-13 9 views
0

У меня есть следующий фрагмент кода, который exectues в каких-либо проблемОшибка SQL: Конверсия удалось при преобразовании DateTime из строки символов

SELECT (
    CASE WHEN 
     (SELECT DateDiff (Day, (
     SELECT ChildDOB1 FROM MatterDataDef Where ptMatter = $Matter$), 
     GETDATE()))>6574 THEN '(over 18)' 
    ELSE '(' + ChildDOB1 + ')' 
    END) 
FROM dbo.MatterDataDef WHERE ptMatter = $Matter$ 

Howeveer, когда я попытаться обернуть код в скобках (так я могу использовать его как часть более длинного уравнения) я получаю следующее сообщение об ошибке «не удалось преобразования при преобразовании DateTime из символьной строки»

любая помощь оценили :)

+0

Каков формат данных в ChildDOB1, это дата? – RichardTheKiwi

+0

@cyberkiwi - разве Джеймс не утверждает это в своей последней строке? –

+0

@ Джейсон Чонг - какая последняя строка? вы имеете в виду текст ошибки? Ошибка также может произойти, если childdob1 сам не является datetime, потому что lateiff происходит сначала – RichardTheKiwi

ответ

1
SELECT CASE 
      WHEN Datediff (DAY, childdob1, Getdate()) > 6574 
      THEN '(over 18)' 
      ELSE '(' + convert(varchar,childdob1) + ')' 
     END 
FROM dbo.matterdatadef 
WHERE ptmatter = $matter$ 

Это эквивалентно кода. Дополнительный подзапрос и скобки не нужны. Проблема заключается в том, что вы добавляете childdob1 (datetime) в скобки без преобразования в varchar. Но действительно ли вам нужен DOB в определенном формате или в возрасте?

+0

спасибо, thts получил его работу (плюс еще раз спасибо за разметку моего кода для меня, я новичок в sql и приятно изучать новые вещи). .. dateformat у меня есть конвертер (varchar (10), childdob1, 103);) –

1

, где у вас есть

ELSE '(' + ChildDOB1 + ')' 

вам нужно преобразовать его в символьный тип .. т.е. VARCHAR

ELSE '(' + cast(ChildDOB1 as varchar(50)) + ')' 
Смежные вопросы