使用列createdDate
和modifiedDate
从某个表中获取记录的最佳脚本是什么?其中modifiedDate
是唯一可为空的列,并且等于现在的日期/当前日期?
如果修改日期列中有null
个值,脚本将获得创建日期。
输出应获取包含最新创建或修改数据的所有记录。我在下面尝试了这些脚本:
SELECT *
FROM table
WHERE ISNULL(CONVERT(date, ModifiedDate),
CONVERT(date,CreatedDate)) = CONVERT(date, getdate())
或
SELECT *
FROM table
WHERE CASE WHEN ModifiedDate IS NULL
THEN CONVERT(date, CreatedDate)
ELSE CONVERT(date,ModifiedDate) END = CONVERT(date, getdate())
答案 0 :(得分:1)
如果您只需要针对今天(= GETDATE()
),这应该很简单:
SELECT *
FROM tbl
WHERE CAST(CreatedDate AS DATE) = CAST(GETDATE() AS DATE)
OR (ModifiedDate IS NOT NULL AND CAST(ModifiedDate AS DATE)= CAST(GETDATE() AS DATE));
一些想法:在谓词中使用函数(这里:ISNULL()
)是非常糟糕的。引擎将无法应用现有索引。阅读 sargable 。一个例外是CAST(SomeDateTime AS DATE)
这是可以理解的。
如果您对任何日期(仅适用于今天)不需要此项,则应该足够说:此行今天已创建或今天已修改。
重要请确保有ModifiedDate
和CreatedDate
的索引!
答案 1 :(得分:0)
这是你在找什么?
SELECT
someColumn1,
someColumn2,
CASE
WHEN modifiedDate IS NULL THEN createdDate
ELSE modifiedDate
END AS someDate
FROM someTable
答案 2 :(得分:0)
您可以在TSQL中使用ISNULL()函数
SELECT * 从表 哪里 ISNULL(CONVERT(date,ModifiedDate),CONVERT(date,CreatedDate))= CONVERT(date,getdate())
答案 3 :(得分:0)
如果使用函数会影响索引,请尝试使用此函数。
SELECT *
FROM table
WHERE ModifiedDate IS NOT NULL
AND CONVERT(date,ModifiedDate) = CONVERT(date, getdate()
UNION
SELECT *
FROM table
WHERE ModifiedDate IS NULL
AND CONVERT(date,CreatedDate) = CONVERT(date, getdate()