在MySQL中的请求中指定日期范围

时间:2019-06-30 11:01:21

标签: mysql sql

我有一张桌子,上面有关于贸易商品的信息,有点物流。它有一个名为“ arriving_date”的列,其中包含到达日期的格式为“ 30.06.2019”。

现在,我需要输入一个仅显示尚未到达的货物的请求,换句话说,到达日期为> 30.06.2019。所以我要输入我的请求

export class StepComponent implements OnInit, OnChanges {

@Input() step: Steps;
@ViewChild('dynamicComponent', { read: ViewContainerRef }) container: ViewContainerRef;

  constructor(private compiler: Compiler) { }

  ngOnInit() { }

  ngOnChanges(change: SimpleChanges) {
    if (this.step && change.step.currentValue !== change.step.previousValue) {
      this.addComponent(this.step);
    }
  }

  addComponent(step: Steps) {
    const cmp = Component({ template: step.formattedText })(class DynamicComponent {
      stepFormGroup: FormGroup;
      constructor(
      ) {
      // Some Component related code
     }

});
    const meta = NgModule({
      imports: [
        CommonModule,
        FormsModule,
        MaterialModule,
        ReactiveFormsModule,
        LibSharedModule,
        BrowserModule,
        BrowserAnimationsModule
      ],
      declarations: [cmp]
    })(class DynamicModule {
    });

    this.compiler
      .compileModuleAndAllComponentsAsync(meta)
      .then(factories => {
        const factory = factories.componentFactories.find(component => component.componentType === cmp);
        this.container.remove();
        this.container.createComponent(factory);
      });
}
}   

但是此请求仅向我显示空白字段。我想我已经猜到了原因。显然,它无法以这种格式比较数字。但是我不确定该如何比较日期。感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

假设到达日期只是一个字符串(而不是实际日期)

SELECT *
  FROM traffic
 WHERE str_to_date(arriving_date, '%d.%m.%Y') > now()
    OR arriving_date is null;

这会将到达日期字符串转换为日期,并将其与当前日期和时间进行比较。

我还添加了一个检查,以确保到达时将其设置为null(即未设置)。

请注意,对列中的值使用函数会使所有查询运行全表扫描。由于您的日期格式不变,因此无法解决。

答案 1 :(得分:1)

感谢大家的帮助!

我设法通过以下方式解决问题: 1.我将到达日期数据类型更改为“日期”(它是整数) 2.我将日期从“ dd.mm.yyyy”格式重写为“ yyyy-mm-dd”,不确定是否重要。 3.最终请求如下所示:

SELECT *
FROM traffic
WHERE arriving_date > NOW()

现在可以正常使用了。

答案 2 :(得分:0)

假设到达日期列是一个porper日期数据类型,请尝试将日期字符串转换为正确的日期

    SELECT *
    FROM traffic
    WHERE arriving_date > str_to_date('30.06.2019', '%d.%m.%Y') 

或者两个日期都可以