date - 将操作应用于具有不规则日期条件的数据字段

标签 date ms-access

这是一个关于 MS Access 的新手问题。新手,我不知道如何正确提出有关 MS Access 的问题。因此,请原谅任何违规行为。

假设我有一个包含以下字段的数据库:

  • 组(文本字段;两个级别 A 和 B)
  • 日期(日期字段;2012 年 1 月至 2014 年 12 月)
  • 年(定义为年:年([日期]))
  • 高度(数字字段;厘米)

  • 现在高度是以厘米为单位的度量。假设我们的高度测量出了问题,并且对于某些日期和组,而不是厘米,英寸被输入到数据库中。假设有太多的值无法在数据库中实际更改它们。所以我需要使用 MS Access 工具来应用它。为简单起见,假设将英寸值除以 0.4 会将单位转换为厘米。

    除 2013 年 10 月 4 日和 2013 年 10 月 5 日正确输入高度外,2012 年和 2013 年所有 A 组的高度都被错误输入。

    所以问题是,我如何(我的想法是在查询的设计 View 中使用标准字段)使用上面指定的日期标准(包括 10 月异常(exception))将高度从英寸转换为厘米?

    即使将我指向正确的方向也会非常有帮助。我习惯了不同的编程语言,这让我不知道从哪里开始。

    更新
    在我匆忙开发一个简单的例子时,我忽略了我试图将这个功能添加到现有查询中。 @winghei 的答案可能是完美的。但是我不清楚在哪里将它添加到我的现有 sql我的查询中的代码。这是已经存在的代码:
    SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
    FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
    WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
    

    所以现在的问题是,我在哪里添加@winghei 的代码?

    更新 2
    所以我仍然无法添加这个查询。
    SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
        FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
        WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
    
    UPDATE(SELECT LAKE.NAME_TXT AS [Group], TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date, Year([TRAWL_TRIP_DAT]) AS [Year], SAMPLE.WEIGHT_NUM AS Height
        FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
        WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));)
       SET `Heightcm`=`Height`/.4 
       WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013
    

    这导致此错误:

    Characters found after end of SQL statement



    于是我将上面的查询命名为 Temp_Query ,保存它然后尝试这个:
    UPDATE(Temp_Query)
       SET `Heightcm`=`Height`/.4 
       WHERE `Trawl_Date` <> #10/4/2013# AND `Trawl_Date` <> #10/5/2013# AND `GROUP` = "A" AND Year(`Trawl_Date`) = 2012 AND Year(`Trawl_Date`) = 2013
    

    这样处理。但是,在数据表 View 中查看此尝试时,只有 Heightcm生成列,而我想做的是将修改后的列作为列添加到整个数据中。

    这里有什么想法吗?

    更新 3
    应@krish KM 的请求发布了表定义(SAMPLE)
    Table: SAMPLE                                                                                        Page: 1
    
    
    
    Properties
    
    AlternateBackShade:       100                         AlternateBackThemeC       -1
    AlternateBackTint:        100                         BackShade:                100
    BackTint:                 100                         DatasheetForeTheme        -1
    
    DatasheetGridlinesTh      -1                          DateCreated:              2013-02-27 8:14:59 PM
    DefaultView:              2                           DisplayViewsOnShare       1
    FilterOnLoad:             False                       GUID:                     {guid {9ADCA5B5-
                                                                                    DCFF-49DB-BBC2-
    
    HideNewField:             False                       LastUpdated:              2016-10-12 9:39:47 AM
    NameMap:                  Long binary data            OrderByOn:                False
    OrderByOnLoad:            True                        Orientation:              Left-to-Right
    
    PublishToWeb:             1                           ReadOnlyWhenDiscon        False
    RecordCount:              55907                       ThemeFontIndex:           -1
    TotalsRow:                False                       Updatable:                True
    

    最佳答案

    没有您的表定义,很难为您提供“好的”解决方案。

  • 打开您的示例表并添加一个新列“new_WEIGHT_NUM”(这将是您正确值的新列)

  • 如果您的以下查询显示正确的行。您可以使用它来更新示例表。
  • 在下面的查询中添加示例表的唯一标识符
  • 将下面的查询另存为查询,就像您已经做的那样。

  • **
    SELECT 
        LAKE.NAME_TXT AS [Group],
        TRAWL_TRIP.TRAWL_TRIP_DAT AS Trawl_Date,
        Year([TRAWL_TRIP_DAT]) AS [Year], 
        SAMPLE.WEIGHT_NUM AS Height
    
        SAMPLE.its_unique_identifier
    
    FROM (((LAKE INNER JOIN STATION ON LAKE.LAKE_ID = STATION.LAKE_ID) INNER JOIN (NET_TYPE RIGHT JOIN (TRAWL_TYPE RIGHT JOIN TRAWL_TRIP ON TRAWL_TYPE.TRAWL_TYPE_ID = TRAWL_TRIP.TRAWL_TYPE_ID) ON NET_TYPE.NET_TYPE_ID = TRAWL_TRIP.NET_TYPE_ID) ON STATION.STATION_ID = TRAWL_TRIP.STATION_ID) INNER JOIN TRAWL ON TRAWL_TRIP.TRAWL_TRIP_ID = TRAWL.TRAWL_TRIP_ID) INNER JOIN (MATURITY_TYPE RIGHT JOIN (SPECIES_TYPE INNER JOIN SAMPLE ON SPECIES_TYPE.SPECIES_TYPE_ID = SAMPLE.SPECIES_TYPE_ID) ON MATURITY_TYPE.MATURITY_TYPE_ID = SAMPLE.MATURITY_TYPE_ID) ON TRAWL.TRAWL_ID = SAMPLE.TRAWL_ID
    WHERE (((TRAWL_TRIP.TRAWL_TRIP_DAT)>=Nz([Forms]![frmReport]![txtTrawlDateFrom],[TRAWL_TRIP_DAT]) And (TRAWL_TRIP.TRAWL_TRIP_DAT)<=Nz([Forms]![frmReport]![txtTrawlDateTo],[TRAWL_TRIP_DAT])));
    

    您的更新查询应如下所示:
    编辑
    UPDATE SAMPLE 
    inner join qry_exp_sampledata2 on sample.sample_id = qry_exp_sampledata2.sample_id
    SET sample.new_WEIGHT_NUM = (WEIGHT_NUM / 0.4)
    

    不需要 where 条件,因为您的 above_query 只包含您有兴趣更新的行。更新后检查值是否正确,理想情况下进行二次更新以使用正确的值更正 WEIGHT_NUM 字段。

    更正值后,您可以删除 new_num_weight 列,因为无论如何这都是“临时”列。

    发布您的表定义,以便我们更多地了解您要查找的内容。

    关于date - 将操作应用于具有不规则日期条件的数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39151099/

    相关文章:

    java - Java 日历类中不影响其他对象的静态变量

    HTML5 日期选择器不能在桌面上工作,只能在移动设备上工作

    java - 计算两个日期之间天数的简单方法?

    ms-access - VBA Access 中引用表单的差异

    sql - Access 查询在 "select"模式下运行顺利,在 "make table"模式下失败

    sql - 尴尬的 DAO 字符串操作问题

    php - 开始日期和开始时间小于结束日期和结束时间验证

    date - 与Hive中的add_months函数不一致?

    sql - 删除重复记录 MS Access SQL Microsoft

    ms-access - 我正在使用单击一次部署,但有一个新的 Access 文件,但需要旧的文件