使用BETWEEN填充记录

时间:2018-05-02 23:33:28

标签: sql sql-server between

记录的日期格式为'yyyy.MM.dd'(例如,2018.05.02), 我已经查询了在某个时间段之间填充某些记录。

SELECT * FROM tableA WHERE (BATCHDT '2018.01.01' AND '2018.05.01');

查询看起来很好,至少对我而言,但不适用于我的MSSQL。 请帮忙。

4 个答案:

答案 0 :(得分:1)

只需使用ANSI标准格式:

SELECT *
FROM tableA
WHERE BATCHDT BETWEEN '2018-01-01' AND '2018-05-01';

不需要转换。我不建议将BETWEEN与日期一起使用,因为它们可能有时间组件。更安全的方法是:

SELECT *
FROM tableA
WHERE BATCHDT >= '2018-01-01' AND
      BATCHDT < '2018-05-02';

答案 1 :(得分:0)

试试这个。

在SQL中,无论格式如何,Date type都是Date type。使用它将意味着casting the field反对文字

SELECT * FROM tableA WHERE cast(BATCHDT as date) BETWEEN '2018-01-01' AND '2018-05-01'

--- 2018-jan-01  and 2018-May-01

答案 2 :(得分:0)

您可能需要将源字段数据转换为可接受的日期转换格式。

如果你的源数据是&yyyy.MM.dd&#39;格式(例如,2018.05.02)

然后您可以将其更改为日期转换可接受的格式,例如&#39; YYYYMMDD&#39;,通过删除&#39;。&#39;字符(所以你的日期记录变成20180502) 查询可以如下

SELECT * FROM tableA WHERE cast(REPLACE(BATCHDT,'.','') as date) BETWEEN '20180101' AND '20180501'

默认情况下,MSSQL服务器也会识别&#39; YYYYMMDD&#39;转换为日期的格式,因此您也不需要先将其转换为日期

SELECT * FROM tableA WHERE REPLACE(BATCHDT,'.','') BETWEEN '20180101' AND '20180501'

答案 3 :(得分:0)

我建议您将BATCHDT保留为DATE数据类型,以避免与时间值混淆,这将与DATETIME一起提供。

另外,建议您使用ISO 8601标准来表示日期。

BETWEEN是一个包容性运营商。所以,下面 BETWEEN '2018-01-01' AND '2018-05-01'将变为

BETWEEN '2018-01-01 00:00:00.000' AND '2018-05-01 00:00:00.000'

因此,它不会返回2018-05-01日期的值。因此,您必须在BETWEEN条件下面应用

BETWEEN '2018-01-01 00:00:00.000' AND '2018-05-01 23:59:59.997'

而不是那样,我建议你选择DATE运算符,这对于BATCHDT来说非常简单。

BETWEEN '2018-01-01' AND '2018-05-01'