sql server中字符串格式问题

fanbo 2009-09-19 12:26:10
我的一个数据库表里面,将日期存储为字符串格式。
由于数据都是从excel中导入的,所以数据的格式不一致。
比如,同一个日期,有的是“2009-03-01”,有的却是“2009-3-1”。
我该如何才能将“2009-3-1”调整成为“2009-03-01”?
...全文
193 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiayouyubo 2009-12-28
  • 打赏
  • 举报
回复
wait notify zmlija a
jiayouyubo 2009-12-26
  • 打赏
  • 举报
回复
大家好谁给我来点积分啊,我个东西要下载 谢谢了
fanbo 2009-12-16
  • 打赏
  • 举报
回复
不好意思,这么晚了才结贴。
xiequan2 2009-09-19
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([col] varchar(50))
insert [tb]
select '2008-8-8'

update tb set col=convert(varchar(10),cast(col as datetime),120)

select * from tb

/*
col
--------------------------------------------------
2008-08-08

(1 行受影响)


*/
htl258_Tony 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 js_szy 的回复:]
SQL codeselectconvert(varchar(10),'2009-09-8',120)---1
----------2009-09-8selectconvert(varchar(10),cast('2009-09-8'asdatetime),120)--2
----------2009-09-08
[/Quote]
按照楼主的意思,第一种方式是不符的.
htl258_Tony 2009-09-19
  • 打赏
  • 举报
回复
最终还是建议把字段类型改为datetime的.

alter table tb alter column fdate datetime
华夏小卒 2009-09-19
  • 打赏
  • 举报
回复

select convert(varchar(10),'2009-09-8',120) ---1
----------
2009-09-8



select convert(varchar(10),cast('2009-09-8' as datetime),120) --2
----------
2009-09-08

SQL77 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xiequan2 的回复:]
应该是直接改数据库的字段类型为datetime就可了
[/Quote]
那后面会有00的那些东西的
hery2002 2009-09-19
  • 打赏
  • 举报
回复
declare @sDate datetime
set @sDate ='2009-3-1'
select convert (nvarchar(10),@sDate,120)
xiequan2 2009-09-19
  • 打赏
  • 举报
回复
应该是直接改数据库的字段类型为datetime就可了
sdlyczl 2009-09-19
  • 打赏
  • 举报
回复
学习
SQL77 2009-09-19
  • 打赏
  • 举报
回复
UPDATE TB SET TIME=CONVERT(VARCHAR(10),CONVERT(DATETIME,TIME),120)

还不是时间格式呀,晕
htl258_Tony 2009-09-19
  • 打赏
  • 举报
回复
update tb set 
fdate=convert(varchar,cast(fdate as datetime),23)
csdyyr 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 csdyyr 的回复:]
SQL codeUPDATE TBSET COL=CONVERT(VARCHAR(10),COL,120)
[/Quote]

UPDATE TB SET COL=CONVERT(VARCHAR(10),CONVERT(DATETIME,COL),120)
SQL77 2009-09-19
  • 打赏
  • 举报
回复
UPDATE TB SET TIME=CONVERT(VARCHAR(10),TIME,120)
华夏小卒 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
SQL codeupdate tablenameset 时间列=convert(varchar(10),时间列,120)
[/Quote]
学习
--小F-- 2009-09-19
  • 打赏
  • 举报
回复
update tablename set 时间列=convert(varchar(10),时间列,120)
csdyyr 2009-09-19
  • 打赏
  • 举报
回复
UPDATE TB SET COL=CONVERT(VARCHAR(10),COL,120)
csdyyr 2009-09-19
  • 打赏
  • 举报
回复
SELECT CONVERT(VARCHAR(10),COL,120)
SQL77 2009-09-19
  • 打赏
  • 举报
回复
select convert(varchar(10),cast(useddate as datetime),120)
我用以上代码测试,出现下面的错误提示。
列名 'useddate' 无效。

第一句,你表都没有,当然无效
select convert(varchar(10),cast(useddate as datetime),120) FROM TB

---------------------------分割线---------------------------
update labrecord
set useddate=convert(varchar(10),cast(RTRIM(LTRIM(useddate)) as datetime),120)
用以上代码,提示下面错误。

从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

你的字段是CHAR类型的吗?字段长度是多少?

update labrecord 
set useddate=convert(varchar(10),cast(RTRIM(LTRIM(useddate)) as datetime),120)


这样试试
加载更多回复(3)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧