【发布时间】:2020-09-05 03:57:55
【问题描述】:
当它包含单个日期时,我可以运行以下 SQL 查询。当我介绍第二个日期时,不会返回任何结果。
我也可以使用DD/MM/YY 格式进行此操作,但只有一个日期。
我正在使用 Office 2010 并连接到 Oracle SQL 数据库。
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQuery As String
ConnectionString = SQLConnect 'This is a function that resolves to the connection string
cnn.Open ConnectionString
cnn.CommandTimeout = 180
StrQuery = "select ref, date from records where date > '10-MAY-20' And date < '13-MAY-20'"
rst.Open StrQuery, cnn
ThisWorkbook.Sheets("Sheet 1").Range("A2").CopyFromRecordset rst
rst.Close
cnn.Close
我尝试将查询修改为“选择noteno,从日期在'10-MAY-20'和'13-MAY-20'之间的记录中转换”。
当使用单个日期时,这两个查询都可以在 Oracle SQL Developer 中工作。
当通过 VBA 运行时,“选择 noteno,从日期如 '%MAY-20' 的记录中转换”也不起作用(但在 Oracle SQL 开发人员中很好)。
【问题讨论】:
-
日期不能小于
10-MAY-20,同时不能大于13-MAY-20,如果您需要介于两者之间的日期,请切换您的<和>符号。如果您的意思是所有不是之间的日期,那么您的And必须是Or。 • 还要确保您的日期格式正确,您可能需要将其更改为2020-05-10(取决于您的设置,请检查)。 -
DATE没有任何格式,它是特定于语言环境的NLS settings具有以字符串显示日期的格式。'10-MAY-20'不是日期,而是字符串。您必须使用TO_DATE将其转换为日期。或者,使用ANSI date literal。此外,停止使用 两位数 表示 year。这就是 Y2K 错误开始的全部原因。 -
@StewartLancaster 根据ISO 8601 只存在
YYYY-MM-DD。这种日期格式是国际交流中唯一不能被误解的格式(xkcd.com/1179)。YYYY-DD-MM格式不存在另见stackoverflow.com/questions/2254014/… -
日期是Oracle中的保留字还是
"date"? -
@StewartLancaster 也可以在下面查看 Lalit 的答案。他又解释了一些。