2014-09-24 3 views
1

У меня проблема с объединением двух таблиц на столбцах различных типов (появляется сообщение об ошибке, преобразующее тип данных varchar в numeric). Сращивание логика должна быть такой:A Преобразование между форматами

ON LC_YEAR (decimal(4,0), null)=DATE (datetime, null) 

Пробовал различные преобразования, но не удалось. Любые идеи о том, как должно выглядеть конверсия?
Безмерно благодарен,
Ю.

+0

Почему бы вы сравнение года к DateTime в любом случае? Это бессмысленно. Должны ли вы извлекать годовую часть даты? И ваше сообщение указывает, что 'DATE' на самом деле является' varchar', который не содержит значения, которое может быть преобразовано в дату? – Turophile

+0

Я понятия не имею, что такое 'LC_YEAR()', но я подозреваю, что вы не задаете правильного вопроса на всех преобразованиях между форматами очень толстый предмет. Вы случайно хотите определить, принадлежит ли дата к данному году? –

ответ

0

LC_YEAR просто колонка, содержащие года (четыре цифры), дата и имеет следующий формат: мм/дд/гггг чч: мм: сс: ттты. Все, что мне нужно сделать, - это присоединиться к таблицам в этих двух столбцах - возможно, извлекая год из столбца DATE (кроме того, функция года (DATE) не работает). В самом деле, есть противоречие между форматом сообщений и столбцов, но я видел, что формат был в свойствах таблицы. Спасибо!

0

Резолюция к этому лежит в том, чтобы точно знать, каков фактический тип данных для каждого поля.

Вы указали, что LC_YEAR является десятичным, а DATE - дата и время;

Но вы также указали, что «формат» DATE равен mm/dd/yyyy hh: mm: ss: mmm, если тип данных равен datetime, тогда формат не имеет значения, если это поле является varchar, тогда формат имеет значение. Таким образом, доступная информация немного запутанна. Вот некоторые идеи для конверсии.

`LC_YEAR` `DATE` 
data Type data type 
decimal  datetime LC_YEAR = YEAR(`DATE`) 
varchar  datetime LC_YEAR = CAST(YEAR(`DATE`) AS VARCHAR) 
varchar  varchar  LC_YEAR = CAST(YEAR(str_to_time(`DATE`,'mm/dd/yyyy hh:mm:ss:mmm')) AS VARCHAR) 
decimal  varchar  LC_YEAR = YEAR(str_to_time(`DATE`,'mm/dd/yyyy hh:mm:ss:mmm')) 

В идеале вы не должны были бы присоединиться с участием преобразования типов данных

Смежные вопросы