SqlServer如何将两个文本字段合并后转换成datetime类型? 50

我这个有点复杂,一下子没有思路,请大家帮忙。源表:0847源字段:field0054(文本/255)源数值举例:2017年field0053(文本/255)源数值举例:1... 我这个有点复杂,一下子没有思路,请大家帮忙。
源表:0847
源字段:
field0054(文本/255) 源数值举例:2017年
field0053(文本/255) 源数值举例:1月
目的表:6831
目的字段:field0020(datetime) 目的值举例:2017-01-01
现在需要把源表那两个字段update到目的表的field0020字段,形成2017-01-01这种格式
展开
 我来答
简单丶尐幸福ok
2017-05-22 · TA获得超过128个赞
知道小有建树答主
回答量:76
采纳率:100%
帮助的人:26.4万
展开全部

不好意思,没有sqlserver,用oracle亲测。   你换下语法就ok。思路应该能看的懂吧,先把字段里的‘年’,‘月’字符去掉,然后是处理一位数月份(1)的数据,变更为‘01’。然后再拼接,格式化更新

merge into a_6831 a 
using a_0847 b
on(a.id_=b.id_) 
when matched then 
update set a.newdate=to_date((select substr(year,1,instr(year,'年')-1) || 
case when length(substr(moth,1,instr(moth,'月')-1))=1 then 0||substr(moth,1,instr(moth,'月')-1) 
when length(substr(moth,1,instr(moth,'月')-1))=2 then substr(moth,1,instr(moth,'月')-1) 
end a from a_0847 aa where aa.id_=a.id_),'yyyy-mm');
commit;
更多追问追答
追问
非常感谢。我先试一下哈,不晓得语法我能不能换正确,我先试一下。
追答
拼接符号||,substr(),instr()   to_date()  merge into。  替换的时候注意下标,sqlserver一般从0开始,oracle一般从1开始
亲林晶0q
2017-05-22 · TA获得超过252个赞
知道小有建树答主
回答量:400
采纳率:50%
帮助的人:161万
展开全部
update 6831 set field0020=Convert(varchar(30),field0054)+'-'+Convert(varchar(30),field0053)+'-'+'01'
更多追问追答
追问

您好,执行SQL后报错了,还是不行。

追答

你的6831有这个这段吗?

update 6831 set field0020=Convert(varchar(30),field0054)+'-'+Convert(varchar(30),field0053)+'-'+'01' from 0847 where 你要更新的条件

刚刚看了你和别的谈话,你先按照你的方法,分别把你的二个字符串转成 2017/2016/2018

01/02/03............   在用以上语句就可以写到你想写的表里,但字期都是1,年月是你现在的年月,因为你没有日的字段

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式