从varchar转到datetime

hm8030 2006-12-13 11:51:06
在sql 2005中,有一列字段本应该是日期格式,但是里面有缺陷,所以必须先对它进行补缺后才可以转转为日期格式,但是奇怪的是全部都改为了日期格式 2007/1/30 上午 12:00:00,无论是写sql :select cast(due_date as datetime) from [dbo].[new_demand]
select convert(datetime,due_date) from new_demand 还是直接更改字段格式,都说Conversion failed when converting datetime from character string.。
但是如果导入到excel更改这个字段为datetime就可以,why?
...全文
841 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ljq688 2007-01-22
收藏
  • 打赏
  • 举报
回复
hm8030 2006-12-20
這個我知道,但是我在數據庫看到,2007/1/30 上午 12:00:00也是sql 格式的一種,不知道為什麼就是不能直接轉換為日期格式,有點奇怪,但是導入excel就可以轉換過來
  • 打赏
  • 举报
回复
jcyluck 2006-12-20
declare @a varchar(30)
set @a='2007/1/30 下午 09:20:07'
select
case
when @a like '%上午%' then convert(datetime,replace(@a,'上午','')+'AM')
when @a like '%下午%' then convert(datetime,replace(@a,'下午','')+'PM')
end as 'tt'
  • 打赏
  • 举报
回复
sujinlin 2006-12-19

Transact-SQL 参考


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)。

不带世纪数位 (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
  • 打赏
  • 举报
回复
hm8030 2006-12-19
happydreamer(VSTS) ( ) 信誉:209 Blog
--------------------------------
改了倒是一個辦法,但是在數據庫數據裡面,這也是它的一種格式啊!!
  • 打赏
  • 举报
回复
happydreamer 2006-12-13
把日期格式改为 2007/1/30 12:00:00
就可以转换了

select cast ('2007/01/30 12:00:00' as datetime)

  • 打赏
  • 举报
回复
hm8030 2006-12-13
請幫忙解決阿?謝謝啦?
  • 打赏
  • 举报
回复
发帖
疑难问题

2.1w+

社区成员

MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
加入社区
帖子事件
创建了帖子
2006-12-13 11:51
社区公告
暂无公告