2014-09-24 87 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')) 

理想情況下,你不會需要加入包括數據類型轉換