在SQL Server 2008中可以找到isoweek:
SELECT datepart(iso_week, getdate())
Run Code Online (Sandbox Code Playgroud)
在SQL Server 2008之前,没有内置函数可以找到isoweek.
我一直在寻找一个好的语法来寻找SQL Server 2005的用户定义的iso_week.我找到了不少解决方案.不喜欢我发现的任何解决方案,大多数都不起作用,而且它们太长了.
由于问题很严重,我预计这个问题已经耗尽,并找到了最佳解决方案.我虽然找不到好方法.
我写了一个解决方案,我将在稍后发布.但在此之前,我想确保没有其他人可以匹配我写的解决方案.
我希望能获得自学者徽章.我敦促人们为这个古老的问题找到最好的答案.
在让人们有机会找到一个好的解决方案后,我会发布我的答案.
我在计算平均时间时遇到问题.情况就是这样:我有多行,每行都有时间格式的数据,所以我需要计算所有行的平均时间并将其与行数相乘但当然我的数据格式有问题,因为我需要将时间乘以整数
有人可以帮我提一些建议吗?thnx这是一些数据:
times
00:00:00.7400000
00:00:01.1870000
00:00:00.6430000
00:00:00.6100000
00:00:12.9570000
00:00:01.1000000
00:00:00.7400000
00:00:00.5300000
00:00:00.6330000
00:00:01.6000000
00:00:02.6200000
00:00:01.0300000
00:00:01.9630000
00:00:00.9800000
00:00:01.0170000
00:00:00.7600000
00:00:00.7130000
00:00:00.9730000
00:00:01.0000000
00:00:01.0530000
00:00:02.9400000
00:00:00.8200000
00:00:00.8400000
00:00:01.1800000
00:01:25.8230000
00:00:01.0000000
00:00:00.9700000
00:00:01.2930000
00:00:01.3270000
00:00:13.5570000
00:00:19.3170000
00:00:58.2730000
00:00:01.6870000
00:00:18.7570000
00:00:42.8570000
00:01:12.3770000
00:00:01.2170000
00:00:09.9470000
00:00:01.4730000
00:00:00.9030000
00:00:01.0070000
00:00:01.1100000
00:00:01.6270000
00:00:05.0570000
00:00:00.6570000
00:00:00.7900000
00:00:03.2930000
00:00:00.8600000
00:00:01.0330000
00:00:00.9300000
00:00:00.8730000
00:00:00.9600000
00:00:00.8070000
NULL
Run Code Online (Sandbox Code Playgroud)
因此,根据这些数据,需要平均时间或/和该数据的总和
如何检查一年是否是闰年?
我有这个代码:
declare @year int
set @year = 1968
SELECT CASE WHEN @YEAR = <LEAPYEAR> THEN 'LEAP YEAR' ELSE 'NORMAL YEAR' END
Run Code Online (Sandbox Code Playgroud)
预期结果:
LEAP YEAR
Run Code Online (Sandbox Code Playgroud) 我想在SQL Server中创建一个过程来选择和连接两个表.@company,@ from和@to参数始终设置,但@serie_type可以为NULL.如果@serie_type不是NULL我只想包含指定的类型,简单AND S.Type = @serie_type,但如果@serie_type为NULL我想包含所有类型,简单,只是不包括AND语句.我的问题是,我不知道是否会设置@serie_type因此我希望o有这样的事情:
/* pseudocode */
??? = AND (IF @serie_type IS NOT NULL S.Type = @serie_type)
Run Code Online (Sandbox Code Playgroud)
这是一个简化的程序版本:
CREATE PROCEDURE Report_CompanySerie
@company INT,
@serie_type INT,
@from DATE,
@to DATE
AS
BEGIN
SELECT
*
FROM Company C
JOIN Series S ON S.Company_FK = C.Id
WHERE C.Id = @company
AND S.Created >= @from
AND S.Created <= @to
/* HERE IS MY PROBLEM */
AND ???
END
GO
Run Code Online (Sandbox Code Playgroud)
不想复制选择因为真正的选择比这更大.
我在SQL Server中有一个表,其中包含用于不同作业的用户的持续时间.我需要计算用户的总体验数.
Declare @temp table(Id int, FromDate DATETIME, ToDate DATETIME)
INSERT INTO @temp ( Id ,FromDate ,ToDate )
VALUES ( 1 , '2003-1-08 06:55:56' , '2005-5-08 06:55:56'),
( 2 , '2000-10-08 06:55:56' , '2008-7-08 06:55:56'),
( 3 , '2013-6-08 06:55:56' , '2015-1-08 06:55:56'),
( 4 , '2006-4-08 06:55:56' , '2011-3-08 06:55:56' )
SELECT * FROM @temp
Run Code Online (Sandbox Code Playgroud)
我想计算经验总数;
Id FromDate ToDate Difference IN Months
===================================================
1 2003-01-08 2005-05-08 28
2 2000-10-08 2008-07-08 93
3 2013-06-08 2015-01-08 19
4 2006-04-08 2011-03-08 59 …Run Code Online (Sandbox Code Playgroud) 这比看起来更难。我需要一个函数来计算日期范围内给定工作日的数字。我不需要任何循环或递归 SQL。有数以百万计的例子就是这样做的。我需要一个快速的计算函数。
函数的输入将是工作日、fromdata、todate
-- counting fridays
set datefirst 1
SELECT dbo.f_countweekdays(5, '2011-07-01', '2011-07-31'),
dbo.f_countweekdays(5, '2011-07-08', '2011-07-15'),
dbo.f_countweekdays(5, '2011-07-09', '2011-07-15'),
dbo.f_countweekdays(5, '2011-07-09', '2011-07-14')
Run Code Online (Sandbox Code Playgroud)
预期结果:
5, 2, 1, 0
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个基于id加上代码加上一个开始日期的密钥,该日期跨越一系列日期并合并id +代码,直到另一个id +代码出现.这是数据:
ID CODE EFFECTIVE TERM 9950 H0504402 07/01/2007 08/31/2007 9950 H0504404 09/01/2007 01/31/2008 9950 H0504402 02/01/2008 01/21/2009 9950 H0504402 03/01/2009 01/21/2010 9950 H0504404 02/01/2010 02/11/2011 9950 H0504404 03/01/2011 NULL
我想要的结果是:
KEY EFFECTIVE TERM 9950_H0504402_20070701 07/01/2007 08/31/2007 9950_H0504404_20070901 09/01/2007 01/31/2008 9950_H0504402_20080201 02/01/2008 01/21/2010 9950_H0504404_20100201 02/01/2010 NULL
SQL Server 2005.
任何帮助都非常值得赞赏,像往常一样在枪口下,并在这个人脑上死了.谢谢.
我有4列a,b,c,d.我的一些行对于所有列都具有相同的值,是否有任何选项可以使用row_number为这些行插入相同的行号,并且如果至少有一个值与上一行中的值不同,则继续计数
例:
a b c d
1 1 1 1
1 1 1 1
1 1 1 2
1 1 1 2
1 1 1 3
1 1 1 3
1 1 2 4
Run Code Online (Sandbox Code Playgroud)
我需要它看起来像:r = row_number
r a b c d
1 1 1 1 1
1 1 1 1 1
2 1 1 1 2
2 1 1 1 2
3 1 1 1 3
3 1 1 1 3
4 1 1 2 4
Run Code Online (Sandbox Code Playgroud)
PS如何在这里写一个像桌子的东西?
我想创建一个表格,它会显示当月每月的每周工作日数,如下表所示.
我知道我需要使用with语句但尚未设法破解它.
我正在使用MS SQL Server 2008 r2,我也是SQL的Junior,所以任何帮助将不胜感激
输出预期:
Month Mon Tue Wed Thu Fri Sat Sun Sum
-------------------------------------------
January 4 5 5 5 4 4 4 31
February 4 4 4 4 4 4 4 28
March 4 4 4 4 5 5 5 31
April 5 5 4 4 4 4 4 30
May 4 4 5 5 5 4 4 31
June 4 4 4 4 4 5 5 30
July 5 5 5 4 4 4 4 …Run Code Online (Sandbox Code Playgroud) 我有一个包含这样的数据的表:
MinFormat(int) MaxFormat(int) Precision(nvarchar)
-2 3 1/2
Run Code Online (Sandbox Code Playgroud)
精度值只能是1/2,1/4,1/8,1/16,1/32,1/64.
现在我想要查询结果为 -
-2
-3/2
-1
-1/2
0
1/2
1
3/2
2
5/2
3
Run Code Online (Sandbox Code Playgroud)
任何获得结果的查询如下?
想法是根据精度值创建基于最小边界(MinFomrat col值为整数)到最大边界(MaxFormat Col值为整数)的结果.
因此,在上面的示例中,值应从-2开始,并根据精度值(1/2)生成下一个值,直到达到3
t-sql ×9
sql ×7
sql-server ×4
math ×2
dataformat ×1
datepart ×1
integer ×1
notnull ×1
pivot ×1
select ×1
sqldatetime ×1
time ×1