小编Ovi*_*rar的帖子

计算两个日期之间的工作日

如何计算SQL Server中两个日期之间的工作日数?

星期一到星期五,它必须是T-SQL.

sql t-sql date

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

如何解决SQL Server - 基于参数的内联表值函数执行计划变化?

下面是这样的情况:
我有一个带有datetime参数的表值函数,最好是tdf(p_date),它可以过滤大约200万行,选择列日期小于p_date的行,并计算其他列的某些聚合值.
它工作得很好,但是如果p_date是一个自定义标量值函数(在我的情况下返回结束日期),则执行计划会被更改,查询将从1秒执行到1分钟执行时间.

概念证明表 - 1K产品,2M行:

CREATE TABLE [dbo].[POC](
    [Date] [datetime] NOT NULL,
    [idProduct] [int] NOT NULL,
    [Quantity] [int] NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

内联表值函数:

CREATE FUNCTION tdf (@p_date datetime)
RETURNS TABLE 
AS
RETURN 
(
    SELECT idProduct, SUM(Quantity) AS TotalQuantity,
         max(Date) as LastDate
    FROM POC
    WHERE (Date < @p_date)
    GROUP BY idProduct
)
Run Code Online (Sandbox Code Playgroud)

标量值函数:

CREATE FUNCTION [dbo].[EndOfDay] (@date datetime)
RETURNS datetime
AS
BEGIN
    DECLARE @res datetime
    SET @res=dateadd(second, -1,
         dateadd(day, 1, 
             dateadd(ms, -datepart(ms, @date),
                 dateadd(ss, -datepart(ss, @date),
                    dateadd(mi,- datepart(mi,@date),
                         dateadd(hh, …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server user-defined-functions sql-execution-plan

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

SQL Server Profiler 中使用的列过滤器的转义字符是什么?

我试图在我们的 sql server 跟踪中找到特定漏洞利用的示例,并且我想过滤 TextData 列以查找出现三次的“%”:%%%。

这意味着我必须转义特殊字符 %。

一种尝试是使用“\”作为转义字符,如下所示:%\%\%\%%

另一种尝试是将其指定为范围:%[%][%][%]%。

在SQL中,我们可以指定用于LIKE运算符的转义字符,但是当我们在SQL Server Profiler中进行过滤时,有没有办法做到这一点?

sql-server sql-server-profiler

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