2014-09-24 56 views
1

我在连接各种类型的列上的两个表时出现问题(出现错误转换数据类型varcharnumericnumeric消息)。 接合逻辑必须是这样的:格式之间的转换

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

尝试了各种转换,但是失败了。关于转换应该如何的任何想法?
非常感谢,
Y.

+0

为什么你会被比较,一年一个日期时间呢?这是没有意义的。你应该提取年份的一部分?你的消息指出'DATE'实际上是一个'varchar',它不包含可以转换为日期的值吗? – Turophile 2014-09-24 10:11:47

+0

我不知道LC_YEAR()是什么,但我怀疑你根本没有提出正确的问题 - 格式之间的转换是一个非常厚的主题。你偶然只是想确定一个日期是否属于某一年? – 2014-09-24 10:18:23

回答

0

LC_YEAR仅仅是一个包含列年(四位数),和日期具有以下格式:MM/DD/YYYY HH:MM:SS:MMM。我所要做的就是加入这两列的表 - 也许实际上是从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')) 

理想情况下,你不会需要加入包括数据类型转换