首页 新闻 会员 周边

sql server 中,更改字段类型时如何保持原数据的格式???

0
悬赏园豆:20 [已解决问题] 解决于 2014-07-24 10:03

大致需求是这样的,我表中有一个字段是 "datetime" 类型的,数据类似于 2014-07-05 10:23:09.500 这样的,由于需求原因需要改成 "nvarchar(50)" ,可是表中已经有很多的数据了,我直接更改字段类型就变成了 "07 05 2014 10:23AM" ,我想要在修改字段类型时或者修改字段类型之后 原数据 变成 "2014年07月05日" 这种格式的,请问我应该怎么做?

convert 能转换成 "2014年07月05日 14:01:32" 这种格式吗?

很急,在线等。大家帮忙解决一下,万分感谢!

问题补充:

我现在应该到了拼接年月日的阶段了,采用的是分别获取年月日在进行拼接的,比如:2014-07-09,我拼接之后得到的是"2014年07月9日",上级要求格式统一成"2014年07月09日",但是 DateName(day,'2014-07-09')  得到的却是 9 ,所以我想请问大家怎么得到 ’'09' ???

在线等。

晓菜鸟的主页 晓菜鸟 | 老鸟四级 | 园豆:2594
提问于:2014-07-21 11:48
< >
分享
最佳答案
0

问题我已经解决了,是利用Substring和Convert得到的'09',非常谢谢大家的耐心回答。

晓菜鸟 | 老鸟四级 |园豆:2594 | 2014-07-24 09:56
其他回答(5)
0

如果不需要在线修改的话,也就是说可以脱机大概半个小时之类的话,就好办了。

可以通过新增一列NewColumn nvarchar(50),然后写一小段代码,将日期中的数值定到NewColumn中。

我傻了,其实如果有新字段的话,直接使用SQL查询

Update Table1 set NewColumn=convert(OldColumn,......) 

请自行查convert语法....

然后再把OldColumn删除,将NewColumn字段改名...

收获园豆:10
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-21 12:21

这种方式我也想过,我当时没有找到转换为"年月日"的方法,我再找找吧,谢谢您提供的思路,非常感谢。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-21 13:11

convert 能转换成 "2014年07月09日 14:01:32" 这种格式吗?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-21 14:01

@晓菜鸟: 貌似没有,好像只有一下这些格式:

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-21 17:09

@火悬崖: 嗯,我查了一上午都没有找到,竟然没有中国汉字的格式,而且还不允许自定义,我勒个去。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-21 17:23

@晓菜鸟: 试过写c#代码或者其他语言的代码了么?通过c#代码来弄应该会很好弄吧!

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-21 18:04

@火悬崖: 是的,用C#的话我就得写一个小Demo了,重点是我要保持原数据不变,DateName(day,'2014-07-09'),怎么能获取到 '09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:13

@爱编程的大叔 DateName(day,'2014-07-09'),怎么能获取到 '09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:14

@晓菜鸟: 没太懂你的意思,你能得到9这个数字么?如果能得到的话可以参考这段代码?

select (case when Id>9 then '大于10' else '小于10' end) from T_Test

如果你能把其他代码也发一些的话,没准有更多的人能帮到你。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-22 10:16

@火悬崖: 我现在应该到了拼接年月日的阶段了,比如:2014-07-09,我拼接之后得到的是"2014年07月9日",上级要求格式统一成"2014年07月09日",但是 DateName(day,'2014-07-09')  得到的却是 9 ,所以我想请问您 怎么得到 ’'09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 11:16

@晓菜鸟: 我能问下一下 DateName(day,'2014-07-09')是什么?里面有哪些代码么?

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-22 13:29

@火悬崖: 返回代表指定日期的指定日期部分的字符串。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 15:23

@晓菜鸟: 你看看这段代码能不能帮到你:

declare @i nvarchar(50);
declare @str int;
set @i='9';
set @str= cast(@i as int);
if @str<=9
begin
 set @i='0'+@i;
end
select @i;

@i是你求出来的9字符串,@str是临时变量。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-22 16:03

@火悬崖: 嗯,有点用,谢谢了.

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 16:50

@晓菜鸟: 不用谢,能帮到你最好了。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-22 17:00
0

楼上说的很对,创建新列,然后将内容复制进去,再删除相应字段以及更名相应字段。

收获园豆:2
waiter | 园豆:1000 (小虾三级) | 2014-07-21 12:27

DateName(day,'2014-07-09'),怎么获取到 '09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:11
0

你改成汉字这个字符串,以后你怎么查询?

收获园豆:3
Albert Fei | 园豆:2102 (老鸟四级) | 2014-07-21 17:27

按时间查询的不是这个字段,是另一个字段.

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:05

@晓菜鸟: 如果确保以后不用于查询,那也没有什么的

支持(0) 反对(0) Albert Fei | 园豆:2102 (老鸟四级) | 2014-07-22 10:56

@Albert Fei: 但是现在得用于前端显示,所以DateName(day,'2014-07-09'),怎么能获取到 '09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 11:10
0

创建一个字符串列,将时间字段的数据转换为字符串插进去,然后删除时间字段

收获园豆:2
迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2014-07-21 21:21

DateName(day,'2014-07-09'),怎么能获取到 '09' ???

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:11
0

第一,SQLSERVER原生是英文的,只是便于多国使用,支持多国语言和多种字符集,但本身还是以英文格式为主;

第二,如果需要转换,可以新增一列,通过自定义函数+trigger的方式自动完成转换和填充的操作;

第三,这种坑爹的需求就不应该在数据端完成,从存储空间和效率来说,有非英文字符掺杂的字符串本身存储空间就高于英文字符(varchar和nvarchar的区别),另外datetime只占8个字节,而你即便用英文+数字的varchar,也至少要20个以上的字节;

收获园豆:3
我是大菠萝 | 园豆:365 (菜鸟二级) | 2014-07-22 13:49

第一,我没意见;

第二,我只是对老数据进行处理一下,写trigger完全没必要;

第三,出现这种坑爹的需求,作为程序员的我应该怎么办?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册