当前位置: 代码迷 >> Sql Server >> 关于数据类型的转换有关问题
  详细解决方案

关于数据类型的转换有关问题

热度:78   发布时间:2016-04-27 13:04:32.0
关于数据类型的转换问题
现在有两张表一张是表类型,一张是公农历对照表:
SQL code
IF OBJECT_ID('CalendarReference') IS NOT NULL DROP TABLE CalendarReference;GO--日历对照表(公历农历对照表)CREATE TABLE CalendarReference( Id INT IDENTITY (1,1) NOT NULL ,  CalendarDate DATETIME NOT NULL ,  LunarDate DATETIME NOT NULL  );--插入数据INSERT INTO CalendarReference VALUES ('20130210','20130101');--创建表类型GOIF TYPE_ID('tyWeekday') IS NOT NULLDROP TYPE tyWeekday;GOCREATE TYPE tyHoliday AS TABLE (Id INT IDENTITY(1,1), HolidayDate DATETIME); 

在SQL Server2008 英文版 和在 SQL Server 2008 SP1 中文简体版 分别运行下面的代码
SQL code
declare @d char(10),        @tyh AS tyHoliday;select @d=CalendarDate from CalendarReference where LunarDate='20130101';select @d;INSERT INTO @tyh  VALUES (@d);SELECT * FROM @tyh;

在SQL Server2008 英文版里会报错:
Msg 242, Level 16, State 3, Line 5
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
但是在SQL Server 2008 SP1 中文简体版 里不报错。
通过调试我发现在SQL Server2008 英文版里 @d的值为:Feb 10 201, [email protected]
但是在SQL Server 2008 SP1 [email protected]:02 10 2013,插入时没报错。
这都是因为时间类型转换为CHAR类型时处理不一样。
请问下高手这种情况应该怎样处理??



------解决方案--------------------
楼主莫急,既然找到问题就好解决。
可用下面的方法转换一下:
语法
使用 CAST:

CAST ( expression AS data_type ) 

使用 CONVERT:

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

--例子
-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO

-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO

这样就行了吗,你参考这个改一下你的代码就ok了。

祝福你成功。




------解决方案--------------------
My sql server was just in SQL2008R2 English version.
SQL code
IF OBJECT_ID('CalendarReference') IS NOT NULL DROP TABLE CalendarReference;GO--日历对照表(公历农历对照表)CREATE TABLE CalendarReference( Id INT IDENTITY (1,1) NOT NULL ,  CalendarDate DATETIME NOT NULL ,  LunarDate DATETIME NOT NULL  );--插入数据INSERT INTO CalendarReference VALUES ('20130210','20130101');--创建表类型GOIF TYPE_ID('tyWeekday') IS NOT NULLDROP TYPE tyWeekday;GOCREATE TYPE tyHoliday AS TABLE (Id INT IDENTITY(1,1), HolidayDate DATETIME); declare @d char(10),        @tyh AS tyHoliday;select @d=convert(varchar(30),CalendarDate,120) from CalendarReference where LunarDate='20130101';INSERT INTO @tyh  VALUES (@d);SELECT * FROM @tyh;-- resultId          HolidayDate----------- -----------------------1           2013-02-10 00:00:00.000
  相关解决方案