在MS ACCESS SQL插入查询中设置数据类型
如何将INSERT中的数据类型显式转换为MS Access中的SELECT查询 示例查询:在MS ACCESS SQL插入查询中设置数据类型,sql,ms-access-2007,Sql,Ms Access 2007,如何将INSERT中的数据类型显式转换为MS Access中的SELECT查询 示例查询: INSERT INTO pStudents( pStudentID, pDate, pRate, pGrade ) SELECT sStudentID, sDate, sRate, sGrade FROM sStudents WHERE (((sStudents.sStudentID) Is Not Null); 在这里,我想在插入pStudents之前将sStudents表中的字段转换为以下字段: p
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
INSERT INTO pStudents( pStudentID, pDate, pRate, pGrade )
SELECT CStr(sStudentID), CDate(sDate), CDbl(sRate), CStr(sGrade)
FROM sStudents
WHERE (((sStudents.sStudentID) Is Not Null);
提前感谢这应该行得通。如果您想要日期,可以使用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);
您可以在查询中使用Access的内置转换功能:
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);
但是,只有当列只包含实际可以转换为给定类型的数据时,这才有效
例如,您可以使用CDbl将字符串列转换为Double,但前提是所选行仅包含实际可以转换为Double的值。
只要您选择了一行,该行的值包含除“hello”之类的数值以外的内容,转换就会失败 另一方面,你真的需要转换吗?
Access本身可以转换很多内容。例如,您可以将数值列中的值插入到字符串列中,Access将自己对其进行转换。您不必为此使用CStr。Access中提供了许多转换功能
CBool(expression)
CByte(expression)
CCur(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CSng(expression)
CStr(expression)
CVar(expression)
然后在INSERT INTO/SELECT查询中使用以下函数:
如果您需要转换SStudent中的每个字段,则可以根据您的编辑执行以下操作:
pStudentID = text
pDate = Short Date
pRate = Double
pGrade = text
INSERT INTO pStudents( pStudentID, pDate, pRate, pGrade )
SELECT CStr(sStudentID), CDate(sDate), CDbl(sRate), CStr(sGrade)
FROM sStudents
WHERE (((sStudents.sStudentID) Is Not Null);
您可以发布一个示例查询以及您想要转换为/来自的数据类型吗?@bluefeet示例查询,数据类型已更新above@user793468:更新我的答案!只要您选择了一个包含数值以外的值的行,转换就会失败——实际上,整个语句都会失败。对于null,它也会失败注意null不是一个值——实际上,在Access中它可能是:我有一个非常好的证明,这个注释太小了,无法包含。还请注意,转换函数内置于SQL引擎中:一个简单的证明是尝试使用CDEC转换为十进制:它接受的参数数量与其VBA等价物不同,因此不起作用!但答案很好;我知道整个语句都会失败……但我假设如果语句中的一个转换失败,那么整个语句都会失败:@onedaywhen我期待2370在这种情况下。@Remou:2370的意义是什么?@onedaywhen预期的证明延迟。这个定理最早是由皮埃尔·德·费马在1637年提出的,著名的是在一本《算术》的页边空白处,他声称自己有一个太大的证明,无法放在页边空白处。直到1995年才公布成功的证据