作者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