我正在尝试在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子句吗?
如果不可能,我如何从某些日期等于某事的客户中选择所有?感谢。
答案 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)
答案 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 ,因为它是一个保留字。