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

MSSQL里日期的格式转换

apple3321 2007-11-30 12:34:18
请教各位,我的数据库表,日期数据的格式为“07 24 1999 12:00AM”,类型为varchar。现在我想直接在数据库内把该日期转换为“YYYY-m-d”的格式,怎么处理,我是生手,还请各位写出完整的SQL语句,我可以直接复制到查询分析器里执行修改操作。
...全文
488 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-11-30
CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

语法
使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])

参数
expression

是任何有效的 Microsoft® SQL Server™ 表达式。有关更多信息,请参见表达式。

data_type

目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

回复
dawugui 2007-11-30
select convert(varchar(10),getdate(),120)


----------
2007-11-30

(所影响的行数为 1 行)
回复
中国风 2007-11-30
在联机帮助—索引—输入—convert
回复
中国风 2007-11-30
在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**
- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM
--------------
回复
中国风 2007-11-30
select convert(varchar(10),时间列,120) from 表

-----varchar(10)显示的字符数,120为格式,楼主可参照联机帮助
回复
hui_hui_2007 2007-11-30
楼主要处理的类型不是 datetime类型,而是varchar类型呀。
所以用 convert函数转换是不行的。
回复
gggg007 2007-11-30
convert(varchar(20),column,120)
回复
hui_hui_2007 2007-11-30

create table t1(
myid int,
mydate varchar(50)
)

insert into t1 select 1,'07 24 1999 12:00AM'
insert into t1 select 2,'07 24 2005 12:00AM'
insert into t1 select 3,'11 24 1999 12:00AM'
insert into t1 select 4,'01 12 1970 12:00AM'

select * from t1
/*
myid mydate
----------- --------------------------------------------------
1 07 24 1999 12:00AM
2 07 24 2005 12:00AM
3 11 24 1999 12:00AM
4 01 12 1970 12:00AM

(所影响的行数为 4 行)
*/

update t1
set mydate = convert(char(10),cast(left(mydate,10) as datetime),120)
select * from t1

/*
myid mydate
----------- --------------------------------------------------
1 1999-07-24
2 2005-07-24
3 1999-11-24
4 1970-01-12

(所影响的行数为 4 行)
*/
回复
you_tube 2007-11-30
select convert(varchar(10),column,120) from table
回复
ojuju10 2007-11-30
select convert(varchar(10), cast(时间列 as datetime),120) from 表
回复
fa_ge 2007-11-30

select convert(varchar(10),时间列,120) from 表

回复
hui_hui_2007 2007-11-30
再写个示例吧。这个是表的


create table t1(
myid int,
mydate varchar(50)
)

insert into t1 select 1,'07 24 1999 12:00AM'
insert into t1 select 2,'07 24 2005 12:00AM'
insert into t1 select 3,'11 24 1999 12:00AM'
insert into t1 select 4,'01 12 1970 12:00AM'

select * from t1
/*
myid mydate
----------- --------------------------------------------------
1 07 24 1999 12:00AM
2 07 24 2005 12:00AM
3 11 24 1999 12:00AM
4 01 12 1970 12:00AM

(所影响的行数为 4 行)
*/

update t1
set mydate = substring(mydate,7,4)+'-'+substring(mydate,1,2)+'-'+substring(mydate,4,2)

select * from t1
/*
myid mydate
----------- --------------------------------------------------
1 1999-07-24
2 2005-07-24
3 1999-11-24
4 1970-01-12

(所影响的行数为 4 行)
*/
回复
hui_hui_2007 2007-11-30
如果字符格式有规律的话,这样是没问题的


declare @t varchar(50),
@t2 varchar(50)

set @t='07 24 1999 12:00AM'
set @t2=substring(@t,7,4)+'-'+substring(@t,1,2)+'-'+substring(@t,4,2)

select @t as 以前格式,@t2 as 新格式

/*
以前格式 新格式
-------------------------------------------------- --------------------------------------------------
07 24 1999 12:00AM 1999-07-24

(所影响的行数为 1 行)
*/
回复
hui_hui_2007 2007-11-30

declare @t varchar(50),
@t2 varchar(50)

set @t='07 24 1999 12:00AM'
set @t2=substring(@t,7,4)+'-'+substring(@t,1,2)+'-'+substring(@t,4,2)

select @t as 以前格式,@t2 as 新格式
回复
chengwenjian 2007-11-30
varchar先转换成datetime(楼主当前举的例子因为时间用的是全角的":",所以直接转会出错),然后再格式化输出喽.

declare @Date varchar(30)
set @Date = '07 24 1999 12:00AM'
Select convert(varchar(10), cast(@Date as datetime), 120)

回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

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