导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

变更日期时间类型的格式

duanyongzhi 2007-12-11 05:00:25
这个我感觉简单可就是做不出来,郁闷。我想将字符串 set @ymd='2007/11/01 00:00:00:000'转成 datatime 类型。我用select cast(@ymd as datatime)转出的是 Nov 1 2007 12:00AM 格式。但我要的格式还是'2007/11/01 00:00:00:000'这样的。这要怎么转换啊?
...全文
95 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanyongzhi 2008-02-19
结帖
回复
wzy_love_sly 2007-12-11
呵呵 我服了小陈子,向楼上学习
回复
fcuandy 2007-12-11
这就看你怎么看待这个问题了.

declare @ymd varchar(8000)
set @ymd='2007/11/01 00:00:00:000' /*即,楼主提交的是这样的值.*/

由于数据库语言操作系统语言及时区设置的不同, 将这样的字符,插入表(的datetime类型字段)后或转换为datatime后,直接select datetime类型
得到了
Nov 1 2007 12:00AM
这样的格式.也就是说,楼主的数据库中就是这么存放的.

而真正在进行数据操作的过程中,比如现在写了一段循环,或是连表操作,等等,进行计算的还是这个 Nov 1 2007 12:00AM. 我们不用管楼主在这里是怎么操作的.

好了,数据取完了,现在要显示了,有要求,要显示成 yyyy/mm/dd hh:mi:ss:mii 这样的格式, 那么将 datetime convert成特定格式后再替换特定连接符.

如果不考滤中间要进行的数据操作,那么肯定会认为这种操作没有意义,我提供了个字串,你又给我一个一模一样的字串出来..

举个例子,我前台程序提交的数据为 '2007/11/01 00:00:00:000' 这样的, 存到数据库后,成为 Nov 1 2007 12:00AM 这样的,
在前台显示的时候我又要显示成 '2007/11/01 00:00:00:000' 这样.

道理皆相同.
如同前台一个字串显示状态,后台数据操作实际上操作的状态值,操作过后,前台显示的仍是状态值一样.
回复
-狙击手- 2007-12-11
declare @ymd varchar(23)
set @ymd='2007/11/01 00:00:00:000'
select convert(char(23),cast(@ymd as datetime),120)


/*

-----------------------
2007-11-01 00:00:00

(所影响的行数为 1 行)

*/
回复
wzy_love_sly 2007-12-11
declare @ymd varchar(8000)
set @ymd='2007/11/01 00:00:00:000'
select replace(convert(varchar(23),@ymd,120),'-','/')

2007/11/01 00:00:00:000
没转吧?换103还是这结果
回楼上,着急了,基本没看楼主意思 sorry
回复
cxmcxm 2007-12-11
过love你要varchar(8000)这么大吗我用varchar(23)就可以了。还有select convert(varchar(100),@ymd,131)中的那个131是什么意思啊,不懂啊。

131* 科威特 dd/mm/yy hh:mi:ss:mmmAM 后面的数字表示各种格式的日期表示,131为 科威特的表示法
回复
fcuandy 2007-12-11
declare @ymd varchar(8000)
set @ymd='2007/11/01 00:00:00:000'
select replace(convert(varchar(23),@ymd,120),'-','/')
/*这里直接用convert将字符convert为字符,其实中间利用了隐式转换.即这里的@ymd其实显式的应为cast(@ymd as datetime)*/
回复
areswang 2007-12-11
declare @a table(dat varchar(30))
insert into @a select '2007/11/01 00:00:00:000'
select * from @a
select convert(datetime,dat,20)from @a
--------------------------------------------
2007-11-01 00:00:00.000
--------------------------------------------
但是replace()掉- ,好像不行啊
回复
areswang 2007-12-11
同意 fcuandy
回复
wzy_love_sly 2007-12-11
select convert(varchar(100),字符,131)
我还字符转字符呢,着急了 sorry
回复
fcuandy 2007-12-11
写法是有问题的.
时间格式跟sql语言版本,及操作系统语言和时区设置有关系.

直接替换-为/是不行的.
先将 @ymd cast为datetime再按某种编号(比如120,那-就特定的连接符)转换为字串,再行替换(-为/).

或者直接datapart来拼.
回复
wzy_love_sly 2007-12-11
我的写错了 sorry
你去连机里查下帮助 查 convert
就都知道了
回复
duanyongzhi 2007-12-11
不过love你要varchar(8000)这么大吗我用varchar(23)就可以了。还有select convert(varchar(100),@ymd,131)中的那个131是什么意思啊,不懂啊。
回复
duanyongzhi 2007-12-11
很好,非常好,潇洒的和 love的都可以转换成我要的格式。谢谢哦。
回复
gthlu 2007-12-11
select cast(left(@ymd,10) as datatime)
回复
wzy_love_sly 2007-12-11
哦 错了 是字符啊
回复
dawugui 2007-12-11
多了个00:
回复
kk19840210 2007-12-11
SET LANGUAGE
回复
wzy_love_sly 2007-12-11
declare @ymd varchar(8000)

set @ymd='2007/11/01 00:00:00:000'

select convert(varchar(100),@ymd,131)
回复
dawugui 2007-12-11
--你的数据格式不对.
declare @ymd as varchar(20)
set @ymd='2007/11/01 00:00:000'
select cast(replace(@ymd , '/' , '-') as datetime)
select cast(@ymd as datetime)
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告