首页 > 解决方案 > 将小时数添加到日期值的用户定义函数

问题描述

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

标签: sqlsql-servertsqldatetimesql-function

解决方案


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

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

推荐阅读