2012-02-28 53 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);