在MS ACCESS SQL插入查询中设置数据类型

时间:2012-02-28 20:02:50

标签: sql ms-access-2007

如何在MS Access中的INSERT INTO / SELECT查询中显式转换数据类型?

示例查询:

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

提前致谢

3 个答案:

答案 0 :(得分: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);

但是,只有当列只包含可以实际转换为给定类型的数据时,这才有效。

例如,您可以使用StringDouble列转换为CDbl() - 但前提是所选行仅包含实际可转换为Double的值。
只要您选择一行的值包含除数值之外的其他值(例如'hello'),转换就会失败。

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

答案 1 :(得分:3)

这应该有效。如果你想要Date,你可以使用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);

答案 2 :(得分: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查询中使用这些功能:

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

如果您需要转换sStudents中的每个字段,那么根据您的编辑,您可以执行以下操作:

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