【发布时间】:2016-07-14 14:20:06
【问题描述】:
enter image description here我正在创建一个包含两个值的查询,一个时期号和相应的日期。这些期间是与我们的月份相似但不完全相同的会计期间。日期在很大程度上是正确的,但我认为我会用 WHERE 语句清理一些不一致的地方。
例如,日期 4/1/2015 属于第 3 期,但它同时出现在第 3 期和第 4 期。为了解决这个问题,我想我会创建一个 WHERE 语句说明:
SELECT DISTINCT table1.period,
table1.datetime
FROM table1
WHERE table1.period <> 4 AND table1.datetime <> '4/1/2015'
这带走了第 4 节的所有内容,而不仅仅是我需要的那个。我也尝试过 datetime 语法:
AND table1.datetime <> '20150401 00:00:00.000'
两种语法的结果相同。我对 SQL 相当缺乏经验,并且一直讨厌处理日期时间值,所以任何帮助都会很棒。
-EDIT- 忘记在第一个日期时间 WHERE 子句中添加单引号。
【问题讨论】:
-
table1.datetime的类型是什么?
-
@alex 是日期时间数据类型,句点是字符串。
-
日期是否有时间值?与日期字符串进行比较时,您可能需要转换为日期。正如 '4/1/2015 01:00:00.000' 不等于 '4/1/2015' 但 CAST('4/1/2015 01:00:00.000' AS DATE) 一样。
-
请注意,您还缺少字符串文字中的破折号? '2015-04-01' 我的猜测是日期问题不是实际问题。如果值中有时间,这也不起作用。
-
也许如果您提供了 ddl 和一些示例数据,问题出在哪里很快就会变得很明显。我们只能猜测。
标签: sql-server datetime where