您的位置:首页 > 数据库

.Net FX 2.0 中文语言包 与 英文包 在 Sql Server 日期操作的 差异。[Conversion failed when converting datetime from character string.]

2008-04-22 00:05 633 查看
问题描述:

.Net FX 2.0 中文语言包 与 英文包 在 Sql Server 日期操作的 差异。[Conversion failed when converting datetime from character string.]

项目环境:

Sql Server 2005等版本

.Net Framework 2.0程序或网站

开发调试无错的项目在其他机器上部署的时候发生错误,出错信息如下:

中文:字符串向 datetime 转换时失败。

英文:Conversion failed when converting datetime from character string.

问题关键:

安装开发主机和部署主机环境分别为[.Net Framework 2.0][.Net Framework 2.0 + 中文语言包/其他语言包]

举例:

例如,在lqb_MyUser表中有User_addDate字段(Datetime类型)

其中包括一行数据,User_addDate字段值=2008-4-1 0:00:00.000

对比:

中文语言包

查询:Select User_addDate from lqb_MyUser

返回:2008-4-1 0:00:00.000

查询:Select Convert(varchar,User_addDate) from lqb_MyUser

返回:04 01 2008 00:00AM

查询:Select Convert(varchar,User_addDate,0) from lqb_MyUser

返回:04 01 2008 00:00AM

查询:Select Convert(varchar,User_addDate,1) from z_UserInfo

返回:04/01/08

英文原版

查询:Select User_addDate from lqb_MyUser

返回:2008-4-1 0:00:00.000

查询:Select Convert(varchar,User_addDate) from lqb_MyUser

返回:Apr 01 2008 00:00AM

查询:Select Convert(varchar,User_addDate,0) from lqb_MyUser

返回:Apr 01 2008 00:00AM

查询:Select Convert(varchar,User_addDate,1) from z_UserInfo

返回:04/01/08

也就是说,如果要用Substring()取时间字符串中的一部分,Convert(Type,Name) 和 Convert(Type,Name,0) 在只安装了.net fx 2.0和安装.net fx 2.0+中文语言包的机器上获得的子串不一致。

出错信息如下:

中文:字符串向 datetime 转换时失败。

英文:Conversion failed when converting datetime from character string.

解决办法就是,规范类型转化的操作,尽量不要省略参数或默认参数

以下列出 日期格式化参数详表


Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06

Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16

Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06

Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06

Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06

Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06

Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06

Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46

Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM

Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06

Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16

Select CONVERT(varchar(100), GETDATE(), 12): 060516

Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937

Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967

Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47

Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157

Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM

Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47

Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250

Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006

Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16

Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006

Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006

Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006

Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006

Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006

Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49

Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM

Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006

Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16

Select CONVERT(varchar(100), GETDATE(), 112): 20060516

Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513

Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547

Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49

Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700

Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827

Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM

Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

常用:

Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46

Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47

Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49

Select CONVERT(varchar(100), GETDATE(), 12): 060516

Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

提供一些常用日期操作语句以供参考:

---求相差天数

select datediff(day,'2004-01-01',getdate())

--1.一个月第一天的

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

--2.本周的星期一

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

select dateadd(wk,datediff(wk,0,getdate()),6)

--3.一年的第一天

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

--4.季度的第一天

SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

--5.当天的半夜

SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

--6.上个月的最后一天

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

--7.去年的最后一天

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

--8.本月的最后一天

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

--9.本年的最后一天

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

--10.本月的第一个星期一

select DATEADD(wk,

DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

--查询本周注册人数

select count(*) from [user]

where datediff(week,create_day-1,getdate())=0

--上周注册人数

select count(*) from [user]

where datediff(week,create_day-1,getdate())=1

--本月注册人数

select count(*) from [user]

where datediff(month,create_day,getdate())=0

--上月注册人数

select count(*) from [user]

where datediff(month,create_day,getdate())=1

--如果要效率,这样写查询

--查询本周注册人数

select count(*) from [user]

where create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))

and create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112))

--上周注册人数

select count(*) from [user]

where create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))

and create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))

--本月注册人数

select count(*) from [user]

where create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))

and create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))

--上月注册人数

select count(*) from [user]

where create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))

and create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐