作者MagicPaul (達人)
看板Database
標題[SQL ] 字串日期換算
時間Sat Mar 15 11:51:50 2014
資料庫名稱:MSSQL
資料庫版本:2008
內容/問題描述:
各位午安,小弟想請問如何在字串的欄位上進行日期換算及運算
這是要換算的資料表
ncanni old huncal hunncb yeacal yeanbc
------------------------------------------------------------------------
99-12-31 99-11-26 100-03-28 100-02-25 100-12-31 100-11-26
99-03-15 99-02-03 99-06-13 99-05-02 100-03-15 100-02-03
ncanni+100day old+100day ncanni+1year old+1year
上面六個欄位值都是字串
ncanni是國曆的日期(varchar)
old 是農歷日期(varchar)
剩下的四個欄位是要放入ncanni跟old的運算結果
huncal,nunncb這二個欄位是要放入國曆與農曆加100天後的結果
yeacal,yeanbc這二個欄位是要放入國曆與農曆加1年後的結果
但是不知如何進行字串的運算
是否要先將字串轉回日期後進行運算再轉回字串呢?
小弟有先試過了一些方法,不過結果都不如預期的結果
有時會跳出像
將 varchar 值 '2010-12-31 00:00:00.000' 轉換成資料類型 int 時,轉換失敗。
這種的錯誤訊息
還請大大指點迷經
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.227.206.31
1F:推 GoalBased:那個錯誤訊息,就是你那串varchar不能轉int,不是int 03/15 15:06
2F:→ GoalBased:合法的樣子,另外就是轉成日其運算再轉回去varchar 03/15 15:06
3F:→ GoalBased:治本的辦法就是,把資料庫的欄位型態轉成日期格式 03/15 15:07
不能轉回去啦,99-10-23會被自動換成1999-10-23系統會自動換成西元年><
4F:→ moyasi:日期存成varchar型態真的悲劇.. 換來換去很麻煩 03/15 18:19
可以的話我真的很想直接用日期 ORZ
5F:推 GoalBased:最近做新的系統也有遇到日期的問題,不過我們沒有農曆 03/15 20:13
6F:→ GoalBased:主要是舊系統是顯示民國年,所以就是在要存回資料庫 03/15 20:13
7F:→ GoalBased:和取出顯示的時候要去做轉換 03/15 20:15
8F:→ GoalBased:你用VARCHAR去存問題會更多,大小月、閏年等等 03/15 20:15
主要是資料存入後基本上就不會在改了,主要是卡在運算上(?o?)
9F:推 GoalBased:那就是轉成日期型態去加減天數再轉回來阿 03/15 21:45
10F:推 GoalBased:GOOGLE一下 SQL字串轉日期 03/15 21:48
11F:推 sleepwu:先截取字串組合成可辨識的日期 再convert成datetime 03/16 00:48
有試過用convert(datetime,date(),50),但是會跳出日期轉換的錯誤( ̄□ ̄|||)a
12F:推 sleepwu:搜尋 convert SQL 有很多時間格式可以轉 03/18 20:53
用了別人分享的格式來轉,全都不行,都是跳出轉換異常的警告
13F:推 sleepwu:有先用right left擷取出年月日? 民國還要+1911轉成西元 03/20 00:16
right left這我沒使用過
民國要先+1911!!我去試看看,感謝
※ 編輯: MagicPaul 來自: 125.227.206.31 (03/20 12:39)
14F:→ Ammenze:先replace掉-變成數字加上19110000 03/21 19:06
15F:→ Ammenze:再去作日期的轉換就可以了 03/21 19:06