WHERE子句问题中的SQL-Server日期时间

时间:2016-07-14 14:20:06

标签: sql-server datetime where

enter image description here我正在创建两个值的查询,一个句号和相应的日期。期间是与我们的月份相似但不相同的会计期间。日期基本上是正确的,但我认为我会用WHERE语句清理一些不一致的地方。

例如,2015年4月1日属于第3期,但它出现在第3期和第4期。为了解决这个问题,我想我会创建一个WHERE语句,说明:

SELECT DISTINCT table1.period,
                table1.datetime
FROM table1
WHERE table1.period <> 4 AND table1.datetime <> '4/1/2015'

这取消了所有第4期而不是我需要的第4期。我也尝试过datetime语法:

AND table1.datetime <> '20150401 00:00:00.000'

两种语法都有相同的结果。我对SQL很缺乏经验,并且总是讨厌处理datetime值,所以任何帮助都会很棒。

-EDIT-忘记将单引号添加到第一个日期时间WHERE子句。

2 个答案:

答案 0 :(得分:1)

请尝试以下操作:

SELECT DISTINCT table1.period,
            table1.datetime
FROM table1
WHERE CASE WHEN table1.period = 4 AND CONVERT(VARCHAR(8),table1.datetime,112) = '20150401' THEN 1 ELSE 0 END = 0

这只删除了包含period=4datetime=20150401的行,而您的查询首先删除了period=4的任何内容(无论[datetime]是什么),然后摆脱任何事情datetime=20150401

答案 1 :(得分:0)

您是否说过句号是字符串字段?你的意思是varchar?
您还想查看日期部分,而不是时间吗?

然后你可以试试这个

SELECT DISTINCT table1.period,
                table1.datetime
FROM table1
WHERE table1.period <> '4' 
AND convert(date, table1.datetime) <> '20150401'