注册 登录
编程论坛 SQL Server论坛

数据类型转换

thjaxd 发布于 2006-11-21 23:39, 2076 次点击
我有一个数据库,苦于不能把nvarchar(8)类型的出生日期和参加工作日期转换成datetime类型,请大侠帮帮忙啊,多谢!
补充一下:出生日期格式为197601,198605,等等 nvarchar(8)
发生错误为:
服务器: 消息 8115,级别 16,状态 2,行 1
将 expression 转换为数据类型 datetime 时发生算术溢出错误。
语句已终止。
或者
服务器: 消息 242,级别 16,状态 3,行 1
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
语句已终止。

[此贴子已经被作者于2006-11-22 0:34:41编辑过]

9 回复
#2
angeloc2006-11-22 11:09
可以手写代码转换为DATETIME匹配的模式!
#3
thjaxd2006-11-22 12:09
比如说什么样的模式啊?联机丛书没怎么看懂
#4
thjaxd2006-11-22 12:11
我的数据库里面的日期都是类型的,都想转一下,就是不会转,好心大侠指点一下啊,谢谢
#5
angeloc2006-11-22 12:17
比如你库里的日期模式是"yy-mm-dd",那么你把数据处理拼接为相同格式就可以了
通常很多日期是"yy-mm-dd hh:mm:ss"这种类型的,那你也同样处理一下,只要与格式匹配就可以,具体方法看你的需求和数据格式
#6
初学Delphi2006-11-22 16:56
string aaa = "19830615";
string bbb = aaa.Substring(0, 4);
string ccc = aaa.Substring(4, 2);
string ddd = aaa.Substring(6, 2);
aaa = bbb + "-" + ccc + "-" + ddd;
DateTime a = Convert.ToDateTime(aaa);
#7
thjaxd2006-11-22 21:44
我已经把所有的日期替换成格式如1983-06-15类型的了,但数据类型还是nvarchar(255),再像datetime类型转换时候还是错误啊?
谁能帮我举个成功了的例子么?
select id,name,convert(datetime(8),cs) from table1 都不行
另外:update table1 set cs=cast(cs as datetime(8)) 这句有什么错误么?

错误为:
服务器: 消息 291,级别 16,状态 1,行 1
CAST 或 CONVERT: 为类型 'datetime' 指定的特性无效

[此贴子已经被作者于2006-11-22 21:48:11编辑过]

#8
初学Delphi2006-11-23 08:48

好像直接用update table1 set cs='"+你取出来的变量(1983-06-15)+"'
不用类型转换
就可以吧?

#9
angeloc2006-11-23 09:21

写入数据时候不需要转换,我说的转换是在你写数据前,如果数据已经是“YY-MM-DD”这种与你库中DATETIME匹配的格式你就直接写就可以了,只有你要写入的数据与DATETIME不匹配才需要在写如前写代码转换为匹配格式。

#10
thjaxd2006-11-23 20:17

首先,谢谢各位:
其次,不好意思了。
可能是没说明白:
就是我现已有个数据库(内含7000条记录)
aaaa 字段 id,name,cs nvarchar(255),cj nvarchar(255)
想得到数据库id,name,cs datetime(8),cj datetime(8)
以便于用datediff (yy,[cs],[cj]) 算出 age (是参加工作时候的年龄)


1