2012-02-28 96 views
0

如何在MS Access中的INSERT INTO/SELECT查询中显式转换数据类型?在MS ACCESS中设置数据类型SQL插入查询

示例查询:

INSERT INTO pStudents(pStudentID, pDate, pRate, pGrade) 
SELECT sStudentID, sDate, sRate, sGrade 
FROM sStudents 
WHERE (((sStudents.sStudentID) Is Not Null); 

在这里,我想在pStudents插入到以下前,从sStudents表中的字段转换:

pStudentID = text 
pDate = Short Date 
pRate = Double 
pGrade = text 

在此先感谢

+0

您可以发布样本查询作为wela作为数据类型,你想要转换为/从? – Taryn 2012-02-28 20:06:51

+0

@bluefeet更新数据类型的示例查询 – user793468 2012-02-28 20:15:43

+0

@ user793468:更新了我的答案! – 2012-02-28 20:24:40

回答

5

你可以使用Access的内置转换功能,在查询:

Select CStr(NumericColumn) from Table 

...或作为INSERT查询:

Insert Into AnotherTable (StringColumn) 
Select CStr(NumericColumn) from Table 

您是不是要找类似的东西?


编辑:

好,具有转换您的样品查询应该是这样的:

INSERT INTO pStudents(pStudentID, pDate, pRate, pGrade) 
SELECT CStr(sStudentID), CDate(sDate), CDbl(sRate), CStr(sGrade) 
FROM sStudents 
WHERE (((sStudents.sStudentID) Is Not Null); 

然而,这只会工作,如果列只包含数据,实际上可以是转换成给定的类型。

例如,可以将String列转换为DoubleCDbl() - 但前提是所选的行只包含实际上可以转化为Double值。
只要您选择一行的值不包含数值(如'hello'),那么转换将失败。

另一方面,你是否真的需要转换?
访问可以自己转换很多。例如,您可以将数值列中的值插入到字符串列中,Access将自行转换它。你不必为此使用CStr()

+0

以上更新的数据类型的示例查询 – user793468 2012-02-28 20:16:05

+1

“一旦选择一行的值不包含数值以外的值,转换将失败” - 实际上,整个语句将失败。它也会失败(注意空值不是一个值 - 实际上,在Access中可能是这样的:我有一个非常奇妙的证明,这个评论太小而不能包含)。另请注意,转换函数内置于SQL引擎中:一个简单的证明是尝试使用'CDEC()'(转换为'DECIMAL'):它的参数数目不同于VBA的参数数目,并且不起作用!但很好的答案;) – onedaywhen 2012-02-29 10:17:32

+0

我知道整个陈述会失败......但我认为很明显,如果陈述中的一次转换失败,整个陈述就会失败:) – 2012-02-29 10:47:46

3

这应该工作。如果你想要的日期,你可以使用CDATE,然而,这将确保日期是短日期(http://www.techonthenet.com/access/functions/date/format.php)

INSERT INTO pStudents(pStudentID, pDate, pRate, pGrade) 
SELECT CStr(sStudentID), Format(sDate, "Short Date"), CDbl(sRate), CStr(sGrade) 
FROM sStudents WHERE (((sStudents.sStudentID) Is Not Null); 
+0

以上数据类型更新的示例查询 – user793468 2012-02-28 20:16:12

1

Access中有许多转换功能。

CBool(expression) 
CByte(expression) 
CCur(expression) 
CDate(expression) 
CDbl(expression) 
CDec(expression) 
CInt(expression) 
CLng(expression) 
CSng(expression) 
CStr(expression) 
CVar(expression) 

http://office.microsoft.com/en-us/access-help/type-conversion-functions-HA001229018.aspx

那么你会在你的INSERT INTO/SELECT查询中使用这些功能:如果你需要每个sStudents字段转换

INSERT INTO table1 (field)... 
SELECT Cstr(fieldValue)... 
FROM table2 

,然后根据您的修改,你可以做以下内容:

INSERT INTO pStudents(pStudentID, pDate, pRate, pGrade) 
SELECT CStr(sStudentID), CDate(sDate), CDbl(sRate), CStr(sGrade) 
FROM sStudents 
WHERE (((sStudents.sStudentID) Is Not Null);