如何在 Datetime 中使用 NOT IN 或 Not Exist 自定义?
Posted
技术标签:
【中文标题】如何在 Datetime 中使用 NOT IN 或 Not Exist 自定义?【英文标题】:How to use NOT IN or Not Exist custom in Datetime? 【发布时间】:2012-12-10 17:20:31 【问题描述】:我使用 2 个表,我希望第一个表而不是表 2 中的数据显示到数据库。
例如 *第一个表“filesTA”*
EmpNo | ChkDate
00001 | 2012-10-01 00:00:00.000
00001 | 2012-10-02 00:00:00.000
00001 | 2012-10-03 00:00:00.000
00001 | 2012-10-04 00:00:00.000
00001 | 2012-10-05 00:00:00.000
“SalaryDay2”
sEmpNo | sDate
00001 | 2012-10-01 00:00:00.000
00001 | 2012-10-02 00:00:00.000
当我选择 2012-10-01 和 2012-10-05 之间的日期时间时
我需要输出:
sEmpNo | sDate
00001 | 2012-10-03 00:00:00.000
00001 | 2012-10-04 00:00:00.000
00001 | 2012-10-05 00:00:00.000
此代码:
SELECT tf.EmpNo,tf.ChkDate
FROM filesTA tf
WHERE tf.ChkDate NOT IN(
SELECT sd2.sDate
FROM SalaryDay2 sd2
WHERE Convert(nvarchar(10),sd2.sDate,126) Between '2012-10-01' and '2012-10-05'
)
请帮助我。谢谢你的时间。:)
【问题讨论】:
请不要将datetime
s 转换为字符串。如果您需要在一侧的字符串和另一侧的 datetime
之间进行比较,请将字符串转换为 datetime
值。在这个特定查询中可能没有太大区别,但将日期视为字符串是日期相关错误的最大来源之一。
【参考方案1】:
除非我误解了你的问题,否则你需要这样的东西:
SELECT tf.EmpNo,tf.ChkDate
FROM filesTA tf
LEFT JOIN SalaryDay2 sd2 ON (sd2.EmpNo = tf.EmpNo AND sd2.ChkDate = tf.ChkDate)
WHERE sd2.EmpNo IS NULL --you may want to add other condition as well
(来自filesTA的记录,在SalaryDay2中没有相应记录)
【讨论】:
【参考方案2】:BETWEEN
是一个包容的东西,基本上归结为
x BETWEEN a AND b
和一样
(x >= a) AND (x <= b)
如果我正确阅读了您的示例,您需要一个不包含在内的版本,您必须努力写出来:
yourdate > '2012-10-01' AND yourdate <= '2012-10-05'
^-- note: <, not <=
【讨论】:
【参考方案3】:使用EXCEPT 子句
SELECT EmpNo, ChkDate
FROM filesTA
EXCEPT
SELECT sEmpNo, sDate
FROM SalaryDay2
WHERE sDate BETWEEN '20121001' and '20121005'
SQLFiddle上的演示
【讨论】:
【参考方案4】:您可以为此目的使用NOT EXISTS
。它应该根据您的加入标准消除第二个表中不存在的行。
DECLARE @FirstDate DATE = '2012-10-01'
DECLARE @SecondDate DATE = '2012-10-05'
SELECT *
FROM FilesTA
WHERE NOT EXISTS ( SELECT 1
FROM SalaryDay2
WHERE SalaryDay2.sDate = FilesTA.ChkDate
-- If you want to check per EmpNo as well uncomment this line:
-- AND SalaryDay2.sEmpNo = FilesTA.EmpNo
)
AND FilesTA.ChkDate BETWEEN @FirstDate
AND @SecondDate
【讨论】:
以上是关于如何在 Datetime 中使用 NOT IN 或 Not Exist 自定义?的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个文件组件中使用 vue-datetime-picker
如何在 C# 中使用 DateTime.Now.Ticks 保持精度
如何在 XML SCHEMA 中使用 datetime2 类型?
如何在 Postgresql 中使用 ALTER 将 VARCHAR 类型更改为 DATETIME?