如何在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
提前致谢
答案 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);
但是,只有当列只包含可以实际转换为给定类型的数据时,这才有效。
例如,您可以使用String
将Double
列转换为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);