SQL Server 中函数的返回值

2024-02-25

我想得到从今天开始的最后一个星期六 + 21 天。

为了实现这一目标,我编写了如下所示的脚本。但问题是我无法成功从结果中返回值。

我想在 SQL Server 中创建这个函数,并在我想要的存储过程中获取这个值。

DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 
DECLARE @NumOfDays INT
DECLARE @resultDate smalldatetime

SET @StartDate = GETDATE()
SET @EndDate = GETDATE()+21
SET @NumOfDays = DATEDIFF(DD,@StartDate , @EndDate) + 1 ;

WITH Tens AS
(
    SELECT 1 N UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 1 
),
HUNDREDS AS
(
    SELECT T1.N FROM TENS T1 CROSS JOIN TENS T2
),
THOUSANDS AS
(
    SELECT T1.N FROM HUNDREDS T1 CROSS JOIN HUNDREDS T2
),
Numbers AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) RN FROM THOUSANDS
)
SELECT TOP 1  
    DATEADD(DD, (RN - 1), @StartDate) SaturdayDates
FROM 
    Numbers
WHERE 
    RN <= @NumOfDays 
    AND DATENAME (WEEKDAY, (DATEADD(DD, (RN - 1), @StartDate))) = 'Saturday' 
ORDER BY 
    SaturdayDates DESC

您能指导我实现我的目标吗?谢谢


像这样重写它表值函数:

CREATE FUNCTION dbo.Get_NextSaturdayDay()
RETURNS TABLE 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references here
    WITH Tens AS
    (
        SELECT 1 N UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 
    ),
    HUNDREDS AS
    (
        SELECT T1.N FROM TENS T1 CROSS JOIN TENS T2
    ),
    THOUSANDS AS
    (
        SELECT T1.N FROM HUNDREDS T1 CROSS JOIN HUNDREDS T2
    ),
    Numbers AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) RN FROM THOUSANDS
    )
    SELECT  TOP 1 DATEADD( DD,(RN - 1) , GETDATE() )  as SaturdayDates 
    FROM 
      Numbers
    WHERE 
      RN <= (DATEDIFF(DD,GETDATE() , DATEADD(day,21,GETDATE()) ) + 1) AND DATENAME ( WEEKDAY, (DATEADD( DD,(RN - 1) , GETDATE() )) ) = 'Saturday' 

      ORDER BY SaturdayDates  DESC
)
GO

Than do:

SELECT *
FROM dbo.Get_NextSaturdayDay()

Output:

SaturdayDates
2016-10-15 11:02:33.570

如果你需要标量值函数:

CREATE FUNCTION dbo.Get_NextSaturdayDay ()
RETURNS datetime
AS
BEGIN

    DECLARE @datetime datetime

    ;WITH Tens AS
    (
        SELECT 1 N UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 UNION ALL 
        SELECT 1 
    ),
    HUNDREDS AS
    (
        SELECT T1.N FROM TENS T1 CROSS JOIN TENS T2
    ),
    THOUSANDS AS
    (
        SELECT T1.N FROM HUNDREDS T1 CROSS JOIN HUNDREDS T2
    ),
    Numbers AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) RN FROM THOUSANDS
    )
    SELECT  TOP 1 @datetime = DATEADD( DD,(RN - 1) , GETDATE() )
    FROM 
      Numbers
    WHERE 
      RN <= (DATEDIFF(DD,GETDATE() , DATEADD(day,21,GETDATE()) ) + 1) AND DATENAME ( WEEKDAY, (DATEADD( DD,(RN - 1) , GETDATE() )) ) = 'Saturday' 

      ORDER BY DATEADD( DD,(RN - 1) , GETDATE() ) DESC
        -- Return the result of the function
        RETURN @datetime

END
GO

然后运行:

SELECT  dbo.Get_NextSaturdayDay()

Output:

2016-10-15 11:02:33.570
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 中函数的返回值 的相关文章

  • 在 SQL Server 中通过标准差消除异常值

    我试图通过标准差消除 SQL Server 2008 中的异常值 我只想要特定列中包含该列平均值的 1 标准差范围内的值的记录 我怎样才能做到这一点 如果您假设事件呈钟形曲线分布 则只有 68 的值与平均值相差 1 个标准差以内 95 的值
  • 在 Sql STUFF 命令中将最后一项的逗号分隔符替换为“and”

    如果我查询的输出是英国 美国 印度 是否可以像英国 美国那样显示查询结果and India 这是我的查询 Select stuff Select Distinct Country as text from tbl Country where
  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 在 SQL Server 2005 IMAGE 列中存储 20 Meg 文件的最有效方法

    我们将文档存储在 SQL Server 2005 数据库表中 列格式为 Image 每次我尝试存储大于 1 Meg 的 PDF 文件时 它都会以某种方式损坏 NET 中是否有任何特别有效的方法来序列化大文件 10megs 并将其存储到数据库
  • 在 azure Devops 管道中部署 SQL 时遇到错误

    我在 azure Devops 的发布管道中使用 sql DACPAC 类型的部署 但出现以下错误 我对 SQL 不了解 有什么建议吗 Publishing to database database name on server Serve
  • 我可以将参数作为数组传递吗?

    例如 而不是 assert eq add 2 3 5 有什么方法可以调用类似的东西 let params u32 2 2 3 assert eq call add params 5 我发现这个功能对于测试非常有用 例如 如果我想为需要大量参
  • SQL 查询将文本数据存储在 Varbinary(max) 中

    有没有办法让 varbinary 在 SQL Server 中接受文本数据 这是我的情况 我有相当大量的 XML 我计划以 压缩 格式存储它们 这意味着 Varbinary 但是 当我进行调试时 我希望能够翻转配置开关并以纯文本形式存储 以
  • 当我使用可变参数而不是常量参数时,为什么我的内联表 UDF 慢得多?

    我有一个表值内联 UDF 我想过滤该 UDF 的结果以获得一个特定值 当我使用常量参数指定过滤器时 一切都很好 并且性能几乎是瞬时的 当我使用可变参数指定过滤器时 它会花费明显更大的时间块 大约是逻辑读取的 500 倍和持续时间的 20 倍
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • SQL Server 2012:有条件地增加计数器用户 ROW_NUMBER()

    我正在尝试申请ROW NUMBER 根据特定条件增加计数器 我的数据如下所示 目标计数器是Prep column id DSR PrepIndicator Prep 1662835 1 1 1 1662835 14 2 2 1662835
  • 如何返回包含最大值标签的向量

    我有一个 4 列数组 我想获得一个向量 其中每行包含包含该行最大值的列的标签 我可以在循环中执行此操作 但我想使用矩阵函数来提高速度 我怎样才能在不编写自己的库函数的情况下做到这一点 有一个函数可以做到这一点 如果x是你的矩阵 尝试max
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • 在对象数组内的特定 JSON 值上创建索引

    假设我的表中有一个 varchar 列 其结构如下 Response DataArray Type Address Value 123 Fake St Type Name Value John Doe 我想在 DataArray 数组元素的
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 如何删除 Sql Server 2005 中存在的临时 SP

    我的问题很简单 如何删除临时存储过程 如果存在 这是因为当我在脚本中创建临时 SP 时 它会在第二次运行时抛出类似 数据库中已存在名为 sp name 的对象 的错误 我不想向用户显示此消息 请帮我 您的解决方案受到高度赞赏 临时进程的删除
  • SQL Server:将表达式转换为数据类型 bigint 时出现算术溢出错误

    这是我的查询顺序 SELECT CASE WHEN BarCode IS NOT NULL AND ExternelBarCode IS NULL THEN BarCode WHEN BarCode IS NULL AND Externel
  • 如何将Scheme中的函数应用于另一个函数返回的参数列表?

    假设有两个函数 f 和 v 进一步假设 v 返回长度为 n 的列表 并且 f 需要恰好 n 个参数 我正在Scheme中寻找正确的语法 以将f应用于v返回的列表 如果我使用语法 f v v arguments 然后我收到一个关于 f 需要
  • SQL Server 中高效的字符串后缀搜索?

    我想找到与谓词匹配的所有行MyColumn LIKE FooBar 但通过使用索引查找而不是扫描 一种方法本质上是创建 MyColumn 的反向版本并搜索反向模式 ooF 在该列上 在反向列上有一个常规索引 然而 我不喜欢手动创建这个反向列

随机推荐

  • 如何使用 Pony ORM 存储 Python 枚举?

    假设我在这里有这个简单的小 Pony ORM 映射 内置 Enum 类是从 Python 3 4 开始新增的 并向后移植到 2 7 from enum import Enum from pony orm import Database Re
  • Jquery Div 点击隐藏

    我在页面中使用 coda 滑块 在这里查看 http www ndoherty com demos coda slider 1 1 1 http www ndoherty com demos coda slider 1 1 1 单击每个选项
  • 使用 Flask 处理大文件上传

    使用 Flask 处理非常大的文件上传 1 GB 的最佳方法是什么 我的应用程序本质上需要多个文件 为它们分配一个唯一的文件编号 然后根据用户选择的位置将其保存在服务器上 我们如何将文件上传作为后台任务运行 以便用户在 1 小时内不会旋转浏
  • MethodImpl 属性在 .NET 中如何工作?

    我正在研究一些框架代码 System AppDomain GetDynamicDir 方法 这就是汇编程序显示的全部内容 MethodImpl MethodImplOptions InternalCall private extern st
  • “if”语句可以在 bitbucket 管道中使用吗?

    我尝试运行以下步骤 但它不执行 if 步骤 第5行和第6行 我很确定它们应该执行 因为测试的目录不存在 我尝试了多种格式的bash if 但他们都失败了 有没有一种方法可以测试我正在使用的条件 step name Google Cloud
  • 在 R 中从列表创建多个饼图

    我想一次创建多个饼图 我有一个名称列表 1 361 456 745 858 1294 1297 2360 2872 3034 5118 5189 因此第一个饼图应标记为 361 依此类推 然后我有几个列表 其中每个饼图都有值 1 102 9
  • UIScrollView 中的 UITableView - 如何使视图滚动,而不是 TableView 本身滚动?

    想象一下 有一个 UIViewController 里面有一个 UIScrollView 视图的顶部有一个 UIImageView 一些 UILabels 和其他东西 此外 还有一个 UITableView 其内容是动态原型 我附上一张图片
  • Selenium 2 WebDriver 实现无法正确处理可扩展菜单

    我有一个网页 单击一个按钮 例如 EXPAND CONTEXT MENU 内部实现为 href 会导致隐藏的上下文菜单在其下方展开 然后单击上下文菜单中的菜单项 由于 Selenium 2 不允许直接访问隐藏元素 因此我首先单击 EXPAN
  • 在 PostgreSQL 9.6.3 中,percentile_cont 和percentile_disc 都没有计算所需的第 75 个百分位

    使用百分位数函数 但我没有得到所需的输出 我会说 不正确 但这些功能可能按预期工作 而我只是没有正确理解它们 这些是我正在处理的数字 n 32 160000 202800 240000 250000 265000 280000 285000
  • Python 决策树 GraphViz

    我正在尝试使用 scikit learn 实现决策树 然后使用 Graphviz 可视化该树 我认为这是可视化 DT 的标准选择 我正在使用 PyCharm anaconda Python 2 7 和 OS X El Capitan 据我所
  • 如何使用GWT的SimpleEventBus或EventBus?

    我正在开发一些简单的绘图软件 需要在 swing 和 gwt 中实现 在 gwt 方面 我将使用 gwt g2d 作为画布 我希望在这两种实现中使用事件总线来简化一些软件 我的理解是它应该是这样的 实例化EventBus 实例化父控件 接收
  • 在C中提取两个特定字符串之间的字符串

    如何提取两个指定字符串之间的字符串 例如 有没有一种简单的方法可以使用它strtok 或者更简单的东西 编辑 两个指定的字符串是提取的字符串是Extract this 使用搜索第一个子字符串strstr 如果找到 则保存子字符串的数组索引
  • 取消/中止/中断 spring-android Resttemplate 请求

    我在一个专门执行 spring android 请求的线程中使用 spring android 我无法中止从 spring android 发起的请求 例如 getForObject 我尝试过了 到达底层输入流关闭但它完全包裹在spring
  • less.js 惰性工作表加载

    我想知道是否有办法加载单个less https github com cloudhead less js页面加载后的某个时间 这个问题 https stackoverflow com questions 3175013 load less
  • F# 运算符重载奇怪的行为

    假设由于某种奇怪的原因我想要这个功能 let str string 42 所以我可以做这样的事情并得到 42 结果 test val it int 42 这很好 但现在当我这样做时 let a 100 a I get error FS000
  • PHP 中的 substr_replace 编码

    我想写入一个文本文件 当我使用子字符串替换 https www php net manual en function substr replace php在 PHP 中 编码发生变化 它无法正确打印希腊字符 如果我不这样做 一切都很好 我怎
  • 如何检索 WordPress 页面的同级页面列表?

    我正在尝试在 WordPress 中创建同级页面 不是帖子 列表来填充页面的侧边栏 我成功编写的代码返回页面父级的标题 据我了解 您需要页面的 id 而不是标题 来检索页面的同级页面 通过wp 列表 页面 http codex wordpr
  • 如何防止使用 git hook 提交文件 (.json)?

    如何防止使用 git hook 提交文件 json 我有一个 json 文件仍在服务器上 所以我不能使用 gitignore 但现在我不想允许任何人更改此文件 提交它 因为它会破坏某些内容 我想使用本地钩子 我怎样才能获得提交中的特殊文件
  • 从今天开始在 Groovy 中计算年龄

    试图根据某人的生日来推测他的年龄 以下代码给出了天数 def now new Date def dob new Date 08 21 1982 println now dob 我们可以除以 365 但这并不完全准确 必须有一种简单的方法来做
  • SQL Server 中函数的返回值

    我想得到从今天开始的最后一个星期六 21 天 为了实现这一目标 我编写了如下所示的脚本 但问题是我无法成功从结果中返回值 我想在 SQL Server 中创建这个函数 并在我想要的存储过程中获取这个值 DECLARE StartDate D