小编t-c*_*.dk的帖子

Isoweek在SQL Server 2005中

在SQL Server 2008中可以找到isoweek:

SELECT datepart(iso_week, getdate())
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2008之前,没有内置函数可以找到isoweek.

我一直在寻找一个好的语法来寻找SQL Server 2005的用户定义的iso_week.我找到了不少解决方案.不喜欢我发现的任何解决方案,大多数都不起作用,而且它们太长了.

由于问题很严重,我预计这个问题已经耗尽,并找到了最佳解决方案.我虽然找不到好方法.

我写了一个解决方案,我将在稍后发布.但在此之前,我想确保没有其他人可以匹配我写的解决方案.

我希望能获得自学者徽章.我敦促人们为这个古老的问题找到最好的答案.

在让人们有机会找到一个好的解决方案后,我会发布我的答案.

t-sql sql-server-2005

14
推荐指数
2
解决办法
1万
查看次数

T-SQL计算平均时间

我在计算平均时间时遇到问题.情况就是这样:我有多行,每行都有时间格式的数据,所以我需要计算所有行的平均时间并将其与行数相乘但当然我的数据格式有问题,因为我需要将时间乘以整数

有人可以帮我提一些建议吗?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)

因此,根据这些数据,需要平均时间或/和该数据的总和

t-sql time integer dataformat sql-server-2008

14
推荐指数
2
解决办法
4万
查看次数

检查闰年

如何检查一年是否是闰年?

我有这个代码:

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)

t-sql math

12
推荐指数
2
解决办法
4万
查看次数

如果存储过程中的参数为null,则选择all

我想在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 t-sql sql-server select notnull

9
推荐指数
2
解决办法
2万
查看次数

T-SQL计算不同年份范围之间的持续时间(以月为单位)

我在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 t-sql sql-server sqldatetime sql-server-2012

9
推荐指数
1
解决办法
263
查看次数

TSQL 中日期范围内的工作日数

这比看起来更难。我需要一个函数来计算日期范围内给定工作日的数字。我不需要任何循环或递归 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)

sql t-sql math sql-server-2008

5
推荐指数
2
解决办法
3317
查看次数

SQL Server查询以合并日期

我正在尝试创建一个基于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.

任何帮助都非常值得赞赏,像往常一样在枪口下,并在这个人脑上死了.谢谢.

sql t-sql sql-server sql-server-2005

5
推荐指数
1
解决办法
501
查看次数

使用Row_Number处理非唯一数据

我有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如何在这里写一个像桌子的东西?

sql t-sql sql-server-2008 sql-server-2012

3
推荐指数
1
解决办法
98
查看次数

SQL计数星期一星期二等等

我想创建一个表格,它会显示当月每月的每周工作日数,如下表所示.

我知道我需要使用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)

sql t-sql pivot sql-server-2008-r2 datepart

3
推荐指数
1
解决办法
1170
查看次数

SQL Server 2008 - 查询以获得分数格式的结果

我有一个包含这样的数据的表:

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

sql sql-server

3
推荐指数
1
解决办法
907
查看次数