【问题标题】:User Defined Function to Add hours to a date value将小时数添加到日期值的用户定义函数
【发布时间】:2020-01-23 16:13:39
【问题描述】:

我正在尝试创建一个 UDF 以使用 SSMS 添加 3 小时的日期值,但在调用该函数时我一直遇到以下错误;

从字符串转换日期和/或时间时转换失败

这就是我对 UDF 的称呼:

SELECT TOP 5 dbo.to_eat('updated') FROM SCHEMA.TABLE_NAME

我创建函数的查询如下;

CREATE FUNCTION [dbo].[to_eat](@date_field NVARCHAR(20)) RETURNS CHAR(20) AS 
BEGIN
RETURN CASE
    WHEN @date_field <>'' AND @date_field IS NOT NULL AND @date_field <> '1900-01-01 00:00:00.0' THEN DATEADD(HOUR, -3, @date_field)
    -- WHEN @rating = 'AA' OR @rating LIKE 'AA[+-]'   THEN 2
    -- WHEN @rating = 'BBB' OR @rating LIKE 'BBB[+-]' THEN 3
    ELSE NULL
  END 
END

【问题讨论】:

  • 也许我遗漏了一些东西,但你为什么不直接使用内置的DATEADD 函数呢? .... 和适当的数据类型?
  • @Uueerdo,该函数有效,它是在 UDF 内部调用的函数,但我需要格式化许多日期数据点。查询变得太长。

标签: sql sql-server tsql datetime sql-function


【解决方案1】:

您应该删除列名周围的单引号,否则它是一个文字字符串,而不是列名:

SELECT TOP 5 dbo.to_eat(updated) FROM SCHEMA.TABLE_NAME

【讨论】:

  • 是的,你是对的......这是一个工作小提琴样本dbfiddle.uk/…
  • 感谢@Frederic 的提琴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多