настройка типов данных в запросах MS ACCESS SQL Insert - PullRequest
0 голосов
/ 29 февраля 2012

Как мы можем явно преобразовать типы данных в запросах INSERT INTO / SELECT в MS Access?

Пример запроса:

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

Здесь я хочу преобразовать поля из таблицы sStudents перед вставкой в ​​pStudents в следующее:

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

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 29 февраля 2012

Вы можете использовать встроенные функции преобразования Access в запросах:

Select CStr(NumericColumn) from Table

... или INSERT запрос:

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

Вы имели в виду что-то подобное?


EDIT:

Хорошо, ваш пример запроса с конверсиями будет выглядеть так:

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.
Как только вы выберете одну строку со значением, которое содержит что-то еще, кроме числовых значений (например, «привет»), преобразование завершится неудачей.

С другой стороны, вам действительно нужны преобразования?
Access может многое преобразовать сам. Например, вы можете вставить значения из числового столбца в строковый столбец, Access преобразует его самостоятельно. Вам не нужно использовать CStr() для этого.

3 голосов
/ 29 февраля 2012

Это должно работать. Если вы хотите 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);
1 голос
/ 29 февраля 2012

В 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...