SQL Server的一些隐藏功能是什么?
例如,未记录的系统存储过程,做一些非常有用但没有足够文档记录的技巧?
感谢所有人的所有伟大答案!
存储过程
片段
功能
杂项
GO重复批次后的数字在sql 2005中,而不是从dateparts年,月和日建立一个查询,
有没有更简洁的方式编写where子句?
我有一张看起来像这样的表:

如您所见,有一些日期重复,那么如何为该表中的每个日期只选择一行?
'id_from_other_table'列来自INNER JOIN和上表
在我的SSIS包中,我必须将DateTime中的值转换为相应的INTEGER值.提供了以下示例.
关于如何转换这些的任何想法?
DATETIME INT
--------- ----
1/1/2009 39814
2/1/2009 39845
3/1/2009 39873
4/1/2009 39904
5/1/2009 39934
6/1/2009 39965
7/1/2009 39995
8/1/2009 40026
9/1/2009 40057
10/1/2009 40087
11/1/2009 40118
12/1/2009 40148
1/1/2010 40179
2/1/2010 40210
3/1/2010 40238
4/1/2010 40269
5/1/2010 40299
6/1/2010 40330
Run Code Online (Sandbox Code Playgroud) 我正在研究SQL Server 2005上的清除过程,它必须删除早于1年前的表中的所有行+当前年份的时间.
例如:如果我在今天6-10-2009执行该程序,则必须删除早于2008-01-01 00:00的行(即包括2007年和向后).
我如何获得一年中第一秒的日期?
我试过这个:
select cast((DATEPART(year, getdate()) -1 )AS DATETIME);
但我得到1905-07-02 00:00:00.000而不是2008-01-01 00:00(正如我错误预期的那样).
有谁可以帮助我吗?
我有以下SQL:
select DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
Run Code Online (Sandbox Code Playgroud)
以这种格式出现:
2012-02-29 23:59:59.000
Run Code Online (Sandbox Code Playgroud)
我需要具有相同日期的确切代码段,但是时间部分必须读取00:00:00.000
修改*我应该在这里明确:我需要在任何给定的时间有上个月的最后一天(当然时间为00:00:00.000格式)
我正在编写一个脚本来分析SQL Server 2008数据库中数千个表中包含的一些数据.
为简单起见,表格可以分为4-8个半相关表格.通过半关联,我的意思是它们是同一项的数据集合,但它们没有任何实际的SQL关系.每个表由一个日期-时间戳(的datetime2数据类型),值(可以是一个bit,int或float根据特定的项目),和当前不感兴趣的一些其它列.日期时间标记在几秒钟内每15分钟(在四分之一小时内)设置; 然而,并非所有数据都是同时准确记录的......
例如:
表格1:
TIMESTAMP VALUE
2014-11-27 07:15:00.390 1
2014-11-27 07:30:00.390 0
2014-11-27 07:45:00.373 0
2014-11-27 08:00:00.327 0
Run Code Online (Sandbox Code Playgroud)
TABLE2:
TIMESTAMP VALUE
2014-11-19 08:00:07.880 0
2014-11-19 08:15:06.867 0.0979999974370003
2014-11-19 08:30:08.593 0.0979999974370003
2014-11-19 08:45:07.397 0.0979999974370003
Run Code Online (Sandbox Code Playgroud)
表3
TIMESTAMP VALUE
2014-11-27 07:15:00.390 0
2014-11-27 07:30:00.390 0
2014-11-27 07:45:00.373 1
2014-11-27 08:00:00.327 1
Run Code Online (Sandbox Code Playgroud)
如您所见,并非所有表都以相同的季度开始TIMESTAMP.基本上,我所追求的是一个查询,它将从3个表中最早的每个15分钟间隔返回3个表中每个表的VALUE TIMESTAMP.对于给出的示例,我想在2014-11-27 07:15开始(不关心秒......因此,需要允许时间戳为+ - 1分钟左右).当没有特定TIMESTAMP的记录时,返回NULL值是可以的.因此,我列出的示例的查询将返回如下内容:
TIMESTAMP VALUE1 VALUE2 VALUE3
2014-11-27 07:15 1 NULL 0
2014-11-27 07:30 0 NULL …Run Code Online (Sandbox Code Playgroud) 我一直在使用SQL Server中的datetime列.现在大多数时候我必须将日期时间的时间部分重置为'00:00:00.000'.
我使用cast函数来实现相同的目的:
select cast(cast(getdate() as date)as datetime)
Run Code Online (Sandbox Code Playgroud)
现在我的其他团队成员使用其他功能:
select cast(floor(cast(GETDATE() as float))as datetime)
Run Code Online (Sandbox Code Playgroud)
要么
SELECT CONVERT(VARCHAR,GETDATE(),105)
Run Code Online (Sandbox Code Playgroud)
我应该记住哪个函数要记住索引列是日期时间类型列.(因此我使用强制转换两次转换datetime - > date - > datetime).
给定一个Event包含名为EventTimeDateTime类型的字段的表,并且该值将包含日期和时间元素,我需要创建一个汇总查询,该查询计算每个月的事件数.
Group By字段的结果类型也必须是具有0时间元素的Date Time并设置为该月的第1天.
这是我到目前为止,但它不是很优雅,我不确定它特别有效.
SELECT COUNT(1) AS [CountOfEvents],
DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime))) AS [Month]
FROM [Event]
GROUP BY DATEADD(d, 1 - DAY(EventTime), DATEADD(dd, 0, DATEDIFF(dd, 0, EventTime)))
Run Code Online (Sandbox Code Playgroud)
更好的效率或优雅的建议?
我有这个sql存储过程,它应该查看特定的表并根据日期列返回作业号.除了星期六早上运行时(这应该返回星期五的所有作业号,但不返回任何行),这很有用.有什么建议?这里有一些逻辑问题,我没有看到?我怎么跟踪这个?
存储过程
ALTER Procedure [dbo].[JC_GetJobsClosedYesterday]
As
SELECT [JobNumber]
FROM [NCLGS].[dbo].[JobClosedDate]
Where LastInvoiceDate between dbo.ufn_StartOfDay (DATEADD(d, -1, GETDATE())) AND dbo.ufn_StartOfDay (GETDATE())
order by JobNumber desc
Run Code Online (Sandbox Code Playgroud)
和一天的开始功能.
ALTER function [dbo].[ufn_StartOfDay] ( @inDate datetime )
RETURNS DateTime AS
BEGIN
DECLARE @Now datetime
set @Now = @inDate
DECLARE @DayStart datetime
set @DayStart = @Now
set @DayStart = DATEADD (ms, -DATEPART(ms,@Now),@DayStart)
set @DayStart = DATEADD (s, -DATEPART(s,@Now),@DayStart)
set @DayStart = DATEADD (mi, -DATEPART(mi,@Now),@DayStart)
set @DayStart = DATEADD (hh, -DATEPART(hh,@Now),@DayStart)
return @DayStart
END
Run Code Online (Sandbox Code Playgroud)
编辑:我的日期转换没有问题(除非它不知道如何处理星期五).我需要帮助返回没有行的部分.
样本数据:
JobNumber …Run Code Online (Sandbox Code Playgroud)