记录的日期格式为'yyyy.MM.dd'(例如,2018.05.02), 我已经查询了在某个时间段之间填充某些记录。
SELECT * FROM tableA WHERE (BATCHDT '2018.01.01' AND '2018.05.01');
查询看起来很好,至少对我而言,但不适用于我的MSSQL。 请帮忙。
答案 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'