大致需求是这样的,我表中有一个字段是 "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' ???
在线等。
问题我已经解决了,是利用Substring和Convert得到的'09',非常谢谢大家的耐心回答。
如果不需要在线修改的话,也就是说可以脱机大概半个小时之类的话,就好办了。
可以通过新增一列NewColumn nvarchar(50),然后写一小段代码,将日期中的数值定到NewColumn中。
我傻了,其实如果有新字段的话,直接使用SQL查询
Update Table1 set NewColumn=convert(OldColumn,......)
请自行查convert语法....
然后再把OldColumn删除,将NewColumn字段改名...
这种方式我也想过,我当时没有找到转换为"年月日"的方法,我再找找吧,谢谢您提供的思路,非常感谢。
convert 能转换成 "2014年07月09日 14:01:32" 这种格式吗?
@晓菜鸟: 貌似没有,好像只有一下这些格式:
@火悬崖: 嗯,我查了一上午都没有找到,竟然没有中国汉字的格式,而且还不允许自定义,我勒个去。
@晓菜鸟: 试过写c#代码或者其他语言的代码了么?通过c#代码来弄应该会很好弄吧!
@火悬崖: 是的,用C#的话我就得写一个小Demo了,重点是我要保持原数据不变,DateName(day,'2014-07-09'),怎么能获取到 '09' ???
@爱编程的大叔 DateName(day,'2014-07-09'),怎么能获取到 '09' ???
@晓菜鸟: 没太懂你的意思,你能得到9这个数字么?如果能得到的话可以参考这段代码?
select (case when Id>9 then '大于10' else '小于10' end) from T_Test
如果你能把其他代码也发一些的话,没准有更多的人能帮到你。
@火悬崖: 我现在应该到了拼接年月日的阶段了,比如:2014-07-09,我拼接之后得到的是"2014年07月9日",上级要求格式统一成"2014年07月09日",但是 DateName(day,'2014-07-09') 得到的却是 9 ,所以我想请问您 怎么得到 ’'09' ???
@晓菜鸟: 我能问下一下 DateName(day,'2014-07-09')是什么?里面有哪些代码么?
@火悬崖: 返回代表指定日期的指定日期部分的字符串。
@晓菜鸟: 你看看这段代码能不能帮到你:
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是临时变量。
@火悬崖: 嗯,有点用,谢谢了.
@晓菜鸟: 不用谢,能帮到你最好了。
楼上说的很对,创建新列,然后将内容复制进去,再删除相应字段以及更名相应字段。
DateName(day,'2014-07-09'),怎么获取到 '09' ???
你改成汉字这个字符串,以后你怎么查询?
按时间查询的不是这个字段,是另一个字段.
@晓菜鸟: 如果确保以后不用于查询,那也没有什么的
@Albert Fei: 但是现在得用于前端显示,所以DateName(day,'2014-07-09'),怎么能获取到 '09' ???
创建一个字符串列,将时间字段的数据转换为字符串插进去,然后删除时间字段
DateName(day,'2014-07-09'),怎么能获取到 '09' ???
第一,SQLSERVER原生是英文的,只是便于多国使用,支持多国语言和多种字符集,但本身还是以英文格式为主;
第二,如果需要转换,可以新增一列,通过自定义函数+trigger的方式自动完成转换和填充的操作;
第三,这种坑爹的需求就不应该在数据端完成,从存储空间和效率来说,有非英文字符掺杂的字符串本身存储空间就高于英文字符(varchar和nvarchar的区别),另外datetime只占8个字节,而你即便用英文+数字的varchar,也至少要20个以上的字节;
第一,我没意见;
第二,我只是对老数据进行处理一下,写trigger完全没必要;
第三,出现这种坑爹的需求,作为程序员的我应该怎么办?