数据库包含欧洲日期格式,但查询美国日期格式

时间:2016-06-08 15:18:24

标签: sql database ms-access

好吧,我正在使用MS Access数据库,我有一个字段Date。在该字段的属性中,我已指定格式应为'dd / mm / yyyy'。但是,当我在字段上使用查询时,它会使用日期格式“mm / dd / yyyy”进行搜索。我不知道它为什么这样做,因为我认为查询适应了字段属性,我无法在线找到解决方案。我的位置和时区是在欧洲设置的。这是我使用的查询:

SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and Date = #7/6/2016#

因此,在此查询中,它不会搜索2016年6月7日,而是搜索2016年7月6日.DipIDID和RestaurantID都设置为数字;日期设置为日期/时间。我如何修复它,以便查询搜索日期格式'dd / mm / yyyy',而不必每次都使用任何sql函数?

4 个答案:

答案 0 :(得分:0)

如果您的查询是用VBA编写的,则必须使用m / d / y编写日期。就是这样。
我倾向于使用Format(expr, "\#mm\/dd\/yyyy\#")构造我的SQL语句。 E.g:

const kUsDtFmt = "\#mm\/dd\/yyyy\#"
sSql =  "SELECT * FROM myTable WHERE dtUpdated = " & Format(Date(), kUsDtFmt )

注意:“\”是格式字符串中的转义键,表示下一个字符

答案 1 :(得分:0)

如果您只想过滤今天的日期,请执行以下操作:

SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = Date()

对于其他日期,请使用DateSerial,使您免于格式考虑:

SELECT Count(*) AS Amount
FROM Plays
WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = DateSerial(2016, 6, 7)

如果连接字符串表达式,请使用ISO序列:

Dim SomeDate As Date

SomeDate = DateSerial(2016, 6, 7)  ' or any other date value.
DateString = Format(SomeDate, "yyyy\/mm\/dd")

SQL = "SELECT Count(*) AS Amount " & _
    "FROM Plays " & _
    "WHERE PersonID = 1001 AND RestaurantID = 101358 and [Date] = #" & DateString & "#"

请注意,日期是一个保留字,因此可能必须如图所示括起来。

答案 2 :(得分:-1)

Welp,我最终找到了解决问题的方法:

"SELECT COUNT(*) as Amount FROM Plays WHERE PersonID = " & Me.txtPersonID &_
" AND RestaurantID = " & Me.txtRestaurantID & " AND Date = #" & Month(Me.txtDate)_
 & "/" & Day(Me.txtDate) & "/" & Year(Me.txtDate) & "#"

我预计你的一些解决方案可以正常工作,但由于某些原因,他们没有。无论如何,现在搜索到正确的日期并返回正确的值。谢谢你花时间帮助我。

答案 3 :(得分:-3)

FormatDateTimevbShortdate一起使用,以确保您的日期格式符合系统预期的格式,而不是人们喜欢的日期。