UPPER和to_char函数未定义

时间:2011-08-20 18:46:57

标签: sql ms-access ms-access-2007

我正在尝试在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'后,它现在称为To_Char is not defined。那么我的问题是,我可以将to_char和UPPER用于where子句吗?

如果不可能,我如何从某些日期等于某事的客户中选择所有?感谢。

4 个答案:

答案 0 :(得分:2)

这些是Oracle功能。与to_char等效的访问权限为datepart

select datepart(yyyy, datetest)

upper匹配ucase

select ucase(name)

答案 1 :(得分:1)

在访问sql中你可以使用ucase(str),month(date_test)和year(date_test)

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

答案 2 :(得分:1)

推荐翻译:

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类型的文字。

答案 3 :(得分:1)

由于您希望行具有2007年8月以来的date_test值,因此可以在WHERE子句中使用文字日期值来指示适当的日期范围。此方法将允许db引擎利用date_test上的索引,因此可能比使用Format()或DatePart()等函数的建议快得多。

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

我用方括号括起 name ,因为它是一个保留字。