Функции UPPER и to_char не определены - PullRequest
2 голосов
/ 20 августа 2011

Я пытаюсь сделать этот запрос в MS Access:

   SELECT *  FROM Clients
   WHERE UPPER(name) = 'Theil' 
   AND   To_Char(date_test,'MM')= 08 
   AND  To_Char(date_test, 'yyyy')=2007;

, но он говорит UPPER is not defined, после удаления верхнего и оставив только name = 'Theil', теперь он говорит thar To_Char is not defined.У меня вопрос: могу ли я использовать to_char и UPPER в предложении where?

Если это невозможно, как я могу выбрать всех клиентов, для которых определенная дата равна чему-то?спасибо.

Ответы [ 4 ]

2 голосов
/ 20 августа 2011

Это функции Oracle.Эквивалент доступа to_char равен datepart:

select datepart(yyyy, datetest)

И upper соответствует ucase:

select ucase(name)
1 голос
/ 22 августа 2011

Поскольку вам нужны строки со значениями date_test от августа 2007 года, вы можете использовать буквальные значения даты в предложении WHERE, чтобы указать соответствующий диапазон дат. Этот метод позволит механизму БД использовать индекс index_test, поэтому он может быть намного быстрее, чем предложения, использующие такие функции, как Format () или DatePart ().

SELECT *
FROM Clients
WHERE
    UCase([name]) = 'THEIL' 
    AND date_test >= #2007/08/01#
    AND date_test < #2007/09/01#;

Я заключил имя в квадратные скобки, потому что это зарезервированное слово.

1 голос
/ 22 августа 2011

Предлагаемый перевод:

SELECT *
  FROM Clients
 WHERE UCASE(name) = 'THEIL' 
       AND FORMAT(date_test,'MM') = '08' 
       AND FORMAT(date_test, 'yyyy') = '2007';

Обратите внимание на кавычки вокруг текстовых литеральных значений.Кроме того, я изменил буквальное значение «THEIL» на верхний регистр, потому что это имеет больше смысла :) (однако, вы можете обнаружить, что в любом случае вы используете сортировку без учета регистра).лучше всего использовать временную функциональность с временными данными:

SELECT *
  FROM Clients
 WHERE UCASE(name) = 'THEIL' 
       AND DATEPART('M', date_test) = 8 
       AND DATEPART('YYYY', date_test) = 2007;

Обратите внимание, что теперь те же значения являются литералами типа SMALLINT.

1 голос
/ 20 августа 2011

В Access sql вы можете использовать ucase (str), месяц (date_test) и год (date_test)

http://www.techonthenet.com/access/functions/

...