【问题标题】:Database contains European dateformat but query searches on American date format数据库包含欧洲日期格式,但查询搜索美国日期格式
【发布时间】:2016-06-08 15:18:24
【问题描述】:

嗯,我使用的是 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 日。PersonID 和 RestaurantID 都设置为数字;日期设置为日期/时间。如何修复它,以便查询搜索为日期格式“dd/mm/yyyy”,而不必每次都使用任何 sql 函数?

【问题讨论】:

    标签: sql database ms-access


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试过这个。它仍然没有返回正确的值。
    【解决方案2】:

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

    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 & "#"
    

    请注意,Date 是保留字,因此可能必须用括号括起来,如图所示。

    【讨论】:

    • 我尝试了最后一个,但它返回一个语法错误,其中显示 #\#dd\/mm\/yyyy\##。这是一个烦人的问题哈哈哈。
    • 你没有使用我的代码。再读一遍,去掉多余的“#”。
    • 我删除了多余的“#”,但由于某种原因它仍然出现语法错误。
    • 当前设置不只格式化当前日期吗?我试图将我的字段 Date 合并到格式中,但结果是……出错了。我在查询中尝试了这个:Format(&"Date" &, "yyyy\/mm\/dd")
    • 是的。你使用了今天的日期。您可以使用任何日期值 - 请参阅编辑后的答案。
    【解决方案3】:

    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) & "#"
    

    我希望您的某些解决方案能够奏效,但由于某些原因,它们没有奏效。无论如何,现在搜索到了正确的日期并返回了正确的值。感谢您花时间帮助我。

    【讨论】:

    • 这只是为您通常使用Format 的日期值创建字符串表达式的冗长方法。
    • 我知道,我也一直使用格式,但由于某种原因它不起作用。我什至让别人看了,代码没有错误。
    • 那就把你的密码给我们找出来吧。
    • 我在回答中给出的表达式,相当于format(txtDate, "\#mm\/dd\/yyyy\#") 完美运行,相当于你的 looong
    【解决方案4】:

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

    【讨论】:

    • FormatDateTime用于显示目的,而不是用于始终要求将日期/时间值的字符串表达式以 ISO 序列或 m/d US 格式格式化的 SQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2023-03-26
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多