下面的函数用减去周末来计算两个日期之间的总时间,当两个日期相差超过一天时,它工作得很好,但在一天内结果是否定的,我真的不明白,有人能修复它吗?
ALTER FUNCTION [dbo].[Gettotalhours]
(
@startdate datetime2,@enddate datetime2
)
RETURNS bigint
AS
BEGIN
declare @dateweekends int
declare @totaltime bigint
Set @Dateweekends =
(DATEDIFF(wk, @StartDate, @EndDate) * 2)
我刚刚从SQL Server 2014 (还只是开发环境)升级到SQL Server 2017,并注意到一个非常奇怪的行为:相同的查询在两个服务器上都有两个不同的影响。
查询已被重写,并减少到示例的最小值:
SELECT * FROM eth_Mandate M WHERE customerId = 1 AND M.isActive = 1
字段isActive是一个计算列(如果任务处于活动状态,则返回1,否则返回0),定义如下:
[isActive] AS (CASE WHEN GETDATE() >= ISNULL([man_start],GETDATE()) AND GE
我使用bigint来处理datediff函数,以毫秒为单位。如何处理数据类型
我正在使用存储过程
alter function [dbo].[date2timestamp] (@dateStr char(255)) returns bigint as
begin
return convert(bigint, datediff(microsecond, '01-01-1970 00:00:00',@dateStr))
end
datediff函数导致溢出。分隔两个日期/时间实例的日期部分数量太大。尝试在不太精确的日期部分使用datediff。
如果我有一个对象,如:
public class Person
{
public int Id {get;set;}
public string Name {get;set;}
public DateTime DOB {get;set;}
}
如果我在我的对象上设置名称,道布是DateTime.MinValue,并使用Dapper,如下所示:
INSERT INTO [Person] ([Person].[Name], [Person].[DOB]) VALUES (@Name, @DOB);
SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS
我有这个功能
ALTER FUNCTION [General].[GetWeekEnding]
(
@Date DATETIME
)
RETURNS DATETIME
AS
BEGIN
-- Return the result of the function
RETURN (DATEADD(day, -1 - (DATEPART(dw, @Date) + @@DATEFIRST - 2) % 7, @Date) + 7)
END
我还需要将时间设置为00:00:00.000,以及查找所提供日期的一周结束日期,您有什么想法?
我正在编写函数使用时区SQL函数根据时区值将时间戳转换为本地时间戳。
源时间戳列具有datetime2数据类型和一个value=2020-10-29 23:59:59.997000。
当我试图将其转换为datetime时,请使用
CAST(CAST(Timestamp AS DatetimeOffset) AT TIME ZONE 'Pacific Standard Time' AS DATETIME)
我得到了value=2020-10-29 23:59:59.996667,这是不正确的。
所要增加的价值是在日期时间。
在sql server 2012中执行以下查询时出错:
DECLARE @Id NVARCHAR(max) = 2147483648
DECLARE @Result BIGINT = 0
IF (
@Id = 0
OR @Id = ''
)
BEGIN
SET @Result = NULL
END
ELSE
BEGIN
SET @Result = convert(bigint,@id)
END
输出:
Msg 248,16级,状态1,第3行nvarchar值'2147483648‘的转换溢出了int列。
有人能告
我把营业时间放在这张桌子上。企业可以在同一天让多个开放时间。关闭时间可以是今天午夜以后.
CREATE TABLE [Process].[OpeningHours](
[openinghoursid] [int] IDENTITY(1,1) NOT NULL,
[businessid] [int] NOT NULL,
[daynumber] [int] NOT NULL,
[opentime] [time](7) NOT NULL,
[duration] [int] NOT NULL,
[closetime] AS (dateadd(minut
我有几个表,必须根据开始和结束日期进行连接,例如...
SELECT *
FROM [t1]
JOIN [t2]
ON [t2].[start] BETWEEN [t1].[start] AND [t1].[stop]
OR [t2].[stop] BETWEEN [t1].[start] AND [t1].[stop]
OR [t2].[start] < [t1].[start] and [t2].[stop] > [t1].[stop]
这些表可能在数百万行中。
我可以选择将开始/停止存储为datetime2和/或bigin
使用ODBC将值绑定到存储的DATETIME2(7)类型的proc参数的正确方法是什么。我想做一些类似的事情:
{CALL myproc (?,?)}
因此,让我们假设第一个参数是一个整数,第二个参数是一个DATETIME2。我可以这样做:
// Bind parameter 1, which is an INT
int val=5;
SQLLEN len=sizeof(val);
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 4, 0,
&val, siz
我有一个从表中提取报表的sql查询。这样做的目的是在当地时区中,按一周中的一天计算计数的总和。表中的日期存储在UTC中。
SELECT (SUM(t.di1) + SUM(t.di2) + SUM(t.di3) + SUM(t.di4)) AS [ScanCount],
DATEPART(WEEKDAY, t.LocalTime) AS [weekday]
FROM (SELECT di1,
di2,
di3,
di4,
CreatedOnUTC AT TIME ZONE